JavaScript小巧 的鼠標(biāo)事件


0.前言

有一段時間沒有寫博客,因?yàn)樽罱鼘?shí)在是太忙了,正好今天就順著js學(xué)習(xí)的順序繼續(xù)講一個常用事件——鼠標(biāo)事件。

1.焦點(diǎn)事件

在學(xué)習(xí)鼠標(biāo)事件之前,我們先來了解一下什么是焦點(diǎn)事件朱灿?在JavaScript的耳朵——事件函數(shù)中的圖片昧识,列舉了一些常用的鼠標(biāo)事件。我們用代碼說一下焦點(diǎn)事件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>焦點(diǎn)事件</title>
</head>
<body>
    <input type="text" name="in" id="put">
    <script type="text/javascript">
        
        var jsInput = document.getElementById("put");

        jsInput.addEventListener("focus", function(){
            console.log("聚焦");
        }, false);
        
        jsInput.addEventListener("blur", function(){
            console.log("離焦");
        }, false);

    </script>
</body>
</html>

當(dāng)我們點(diǎn)擊輸入框時盗扒,實(shí)現(xiàn)了聚焦(focuc)跪楞,當(dāng)鼠標(biāo)離開輸入框時,實(shí)現(xiàn)了離焦(blur)侣灶。就是這么簡單甸祭,這有啥難的!H煊啊池户!

2.鼠標(biāo)事件——單擊與雙擊

廢話不多說,上代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鼠標(biāo)事件-單擊與雙擊</title>
</head>
<body>
    <div id="box" style="width: 100px;height: 100px;background-color: red"></div>
    <script type="text/javascript">
        
        var jsDiv = document.getElementById("box");

        //單擊
        jsDiv.addEventListener("click", funcOnceClick, false);
        function funcOnceClick() {
                console.log("單擊");
        }
    


        //雙擊
        jsDiv.addEventListener("dblclick", funcDblClick, false);
        function funcDblClick() {
            console.log("雙擊");
        }

    </script>
</body>
</html>

運(yùn)行效果:
![Uploading 捕獲_324394.PNG . . .]
我們發(fā)線當(dāng)點(diǎn)擊紅色方塊時凡怎,控制臺正常打印“單擊”校焦,但是點(diǎn)擊雙擊時,返現(xiàn)多打印兩次單擊统倒,這是為什么呢寨典?因?yàn)槲覀冊陔p擊時,實(shí)際上是進(jìn)行了兩次單擊房匆,所以會出現(xiàn)兩次單機(jī)的效果耸成,然后在打印出雙擊。那么如何解決呢浴鸿?首先我們應(yīng)該定義一個定時器井氢,設(shè)置時間在這個事件內(nèi)完成雙擊的話,就打印出雙擊岳链,超出這個時間毙沾,就顯示單擊,首先設(shè)置一個定時器作為全局變量,再在單擊中添加定時器宠页,注意要用延時定時器——setTimeout

//單擊
        jsDiv.addEventListener("click", funcOnceClick, false);
        function funcOnceClick() {
            timer = setTimeout(function(){
                console.log("單擊");
            }, 300);
        }
    


        //雙擊
        jsDiv.addEventListener("dblclick", funcDblClick, false);
        function funcDblClick() {
            console.log("雙擊");
        }

此時在看運(yùn)行效果:

捕獲.PNG

發(fā)現(xiàn)先單擊效果沒出錯左胞,但是書記效果是雙擊打印出來了寇仓,但是又出現(xiàn)了兩次單擊,看來Bug還是沒改出來啊烤宙,原因和上面類似遍烦,當(dāng)我們點(diǎn)擊單擊是創(chuàng)建了定時器,但是在雙擊時沒有清除定時器躺枕,造成單擊時造成的后果還在繼續(xù)服猪,因此我們需要清除定時器,所以在雙擊中清除單擊所生成的定時器:

//雙擊
        jsDiv.addEventListener("dblclick", funcDblClick, false);
        function funcDblClick() {
            clearTimeout(timer);
            console.log("雙擊");
        }
捕獲.PNG

但是又發(fā)現(xiàn)雙擊之后只出現(xiàn)了一次單擊拐云,只是因?yàn)槲颐粗磺宄穗p擊造成的兩次單擊后果的其中一次罢猪,還差一次,那么就需要在單擊中再清理一次即可:

jsDiv.addEventListener("click", funcOnceClick, false);
        function funcOnceClick() {
            clearTimeout(timer);
            timer = setTimeout(function(){
                console.log("單擊");
            }, 300);
        }
捕獲.PNG

bug完美解決2娲瘛I排痢!薇缅!不過這個不常用危彩,誰會沒事在一個按鈕上即實(shí)現(xiàn)單擊,又實(shí)現(xiàn)雙擊呢泳桦,了解一些就行了汤徽。

3.鼠標(biāo)事件-mouseover、mouserout灸撰、mousedown谒府、mouseup、mousemove

之一部分比較簡單浮毯,直接上代碼自己就能看懂狱掂,里面有詳細(xì)注釋

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鼠標(biāo)事件-mouseover、mouserout亲轨、mousedown趋惨、mouseup、mousemove</title>
</head>
<body>
    <div id="box" style="width: 200px;height: 200px;background-color: red"></div>
    <script type="text/javascript">

        var jsDiv = document.getElementById("box");
        
        //1惦蚊、當(dāng)鼠標(biāo)進(jìn)入小方塊中時器虾,顏色變?yōu)榫G色
        //2、當(dāng)鼠標(biāo)移出小方塊時蹦锋,顏色恢復(fù)紅色
        //3兆沙、當(dāng)鼠標(biāo)在小方塊中按下時,小方塊寬度變?yōu)樵瓉淼?倍
        //4莉掂、當(dāng)鼠標(biāo)在小方塊中抬起時葛圃,小方塊寬度恢復(fù)原狀
        


        //1
        jsDiv.onmouseover = function() {
            this.style.backgroundColor = "green";
            // jsDiv.style.backgroundColor = "green";
        };
        

        //2
        jsDiv.onmouseout = function() {
            this.style.backgroundColor = "red";
        };


        //3
        jsDiv.onmousedown = function() {
            this.style.width = this.offsetWidth * 2 + "px";

        };

        //4
        jsDiv.onmouseup = function() {
            this.style.width = this.offsetWidth / 2 + "px";
        };


        //mousemove:鼠標(biāo)移動事件
        //鼠標(biāo)移動就會觸發(fā)
        document.onmousemove = function() {
            console.log("鼠標(biāo)移動");
        };

    </script>
</body>
</html>

4.鼠標(biāo)事件的event對象

在編譯器中輸入如下代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鼠標(biāo)事件的event對象</title>
</head>
<body>
    <div id="box" style="width: 300px; height: 300px;background-color: red;position: absolute;left: 200px;top: 200px"><span>Hello world
</span></div>
    <script type="text/javascript">
        /**
         * 觸發(fā)事件即可得到一個該事件的對象,該對象包含了這個事件的所有信息
         */
    
        var jsDiv = document.getElementById("box");

        document.onclick = function(e) {
            //              IE
            var evt = e || window.event;
            console.log(evt);
        };  


    </script>
</body>
</html>

點(diǎn)擊效果,控制臺打印的信息:

捕獲.PNG
捕獲.PNG

劃紅線的部分是必須要知道的屬性:

screenX:鼠標(biāo)位置相對于用戶屏幕水平偏移量库正,而screenY也就是垂直方向的曲楚,此時的參照點(diǎn)也就是原點(diǎn)是屏幕的左上角。

clientX:跟screenX相比就是將參照點(diǎn)改成了瀏覽器內(nèi)容區(qū)域的左上角褥符,該參照點(diǎn)會隨之滾動條的移動而移動龙誊。

pageX:參照點(diǎn)也是瀏覽器內(nèi)容區(qū)域的左上角,但它不會隨著滾動條而變動

捕獲.PNG

三者具體關(guān)系
因此:

console.log(evt.clientX, evt.clientY);
console.log(evt.pageX, evt.pageY);
console.log(evt.screenX, evt.screenY);
console.log(evt.button);
捕獲.PNG

5.總結(jié)

各位大哥大姐喷楣,誰會在簡書中插入gif圖片趟大,教我一下唄,不然每次都是插入靜態(tài)圖片铣焊,好麻煩吶Q沸唷!曲伊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叽讳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子熊昌,更是在濱河造成了極大的恐慌绽榛,老刑警劉巖湿酸,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婿屹,死亡現(xiàn)場離奇詭異,居然都是意外死亡推溃,警方通過查閱死者的電腦和手機(jī)昂利,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铁坎,“玉大人蜂奸,你說我怎么就攤上這事∮财迹” “怎么了扩所?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朴乖。 經(jīng)常有香客問我祖屏,道長,這世上最難降的妖魔是什么买羞? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任袁勺,我火速辦了婚禮,結(jié)果婚禮上畜普,老公的妹妹穿的比我還像新娘期丰。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布钝荡。 她就那樣靜靜地躺著街立,像睡著了一般。 火紅的嫁衣襯著肌膚如雪化撕。 梳的紋絲不亂的頭發(fā)上几晤,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音植阴,去河邊找鬼蟹瘾。 笑死,一個胖子當(dāng)著我的面吹牛掠手,可吹牛的內(nèi)容都是我干的憾朴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼喷鸽,長吁一口氣:“原來是場噩夢啊……” “哼众雷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起做祝,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砾省,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后混槐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體编兄,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年声登,在試婚紗的時候發(fā)現(xiàn)自己被綠了狠鸳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡悯嗓,死狀恐怖件舵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脯厨,我是刑警寧澤铅祸,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站合武,受9級特大地震影響临梗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜眯杏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一夜焦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岂贩,春花似錦茫经、人聲如沸巷波。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抹镊。三九已至,卻和暖如春荤傲,著一層夾襖步出監(jiān)牢的瞬間垮耳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工遂黍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留终佛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓雾家,卻偏偏與公主長得像铃彰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芯咧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1牙捉、窗體 1、常用屬性 (1)Name屬性:用來獲取或設(shè)置窗體的名稱敬飒,在應(yīng)用程序中可通過Name屬性來引用窗體邪铲。 ...
    Moment__格調(diào)閱讀 4,549評論 0 11
  • (兩年前的文章)原作者沒有署名,在此標(biāo)明轉(zhuǎn)載文章无拗,源自QQ空間日志带到,侵刪 1:主板故障 2:顯卡故障 3:聲卡故障...
    aclihui閱讀 2,171評論 0 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • Dom對象的innerText和innerHTML有什么區(qū)別? innerText:可寫屬性蓝纲,返回元素內(nèi)包含的文本...
    來人啊都給朕退下吧閱讀 386評論 0 0
  • 我并不是一個很能逛街的女生阴孟,但是自從接觸到歐洲的集市后晌纫,就一發(fā)不可收拾的的愛上逛集市税迷。記得以前在國內(nèi)的時候我就超愛...
    聞聽西辭閱讀 491評論 7 6