事件

事件:分為兩部分

1谦趣、行為本身:瀏覽器天生就賦予其的行為:onmouseover(onmouserenter)、onmouseout(onmouseleave)月趟、onmousemove郑临、onmousedown熙涤、onmouseup崎页、onmousewheel(鼠標(biāo)滾輪滾動(dòng)行為)鞠绰、onscroll(滾動(dòng)條滾動(dòng)行為)、onresize(window.onresize瀏覽器窗口的大小改變事件)飒焦、onload蜈膨、onunload、onfocus(文本框獲取焦點(diǎn)行為)牺荠、onblur(文本框失去焦點(diǎn))翁巍、onkeydown、onkeyup(鍵盤(pán)的按下和抬起行為)...
哪怕沒(méi)有給上述的行為綁定方法休雌,事件也是存在的灶壶,當(dāng)我們點(diǎn)擊的時(shí)候,同樣會(huì)觸發(fā)它的onclick行為杈曲,只是什么事情都沒(méi)做而已

2驰凛、事件綁定:給元素的某一個(gè)行為綁定方法

var oDiv=document.getElementById("div1");
//-->方法1:onclick這個(gè)行為定義在當(dāng)前元素的私有屬性上

oDiv.onclick=function(){
    //-->當(dāng)我們觸發(fā)oDiv的click行為的時(shí)候,會(huì)把綁定的這個(gè)函數(shù)執(zhí)行
};

//-->方法2:addEventListener這個(gè)屬性是定義在當(dāng)前元素所屬EventTarget這個(gè)類(lèi)的原型上的
//addEventListener--->第一個(gè)參數(shù)是行為的類(lèi)型鱼蝉,第二個(gè)參數(shù)是給當(dāng)前的行為綁定的方法洒嗤,第三個(gè)參數(shù)是控制在哪個(gè)階段發(fā)生:true(在捕獲階段發(fā)生)  false(在冒泡階段發(fā)生)
oDiv.addEventListener("click",function(){
      console.log("ok");
},false);

方法2這種稱為:DOM 2級(jí)事件綁定

onclick這種綁定方式稱為:DOM 0級(jí)事件綁定
把匿名函數(shù)定義的部分當(dāng)做一個(gè)值賦值給oDiv的點(diǎn)擊行為(函數(shù)表達(dá)式),當(dāng)觸發(fā)#div1的點(diǎn)擊行為的時(shí)候魁亦,會(huì)執(zhí)行對(duì)應(yīng)綁定上的方法
重要:不僅僅把綁定的方法執(zhí)行了,而且瀏覽器還默認(rèn)給這個(gè)方法傳遞了一個(gè)參數(shù)值MouseEvent:鼠標(biāo)事件對(duì)象
(1)它是一個(gè)對(duì)象數(shù)據(jù)類(lèi)型值羔挡,里面包含了很多的屬性和屬性值洁奈,這些都是用來(lái)記錄當(dāng)前鼠標(biāo)的相關(guān)信息的
(2)MouseEvent-->UIEvent-->Event-->Object
(3)MouseEvent記錄的是頁(yè)面中唯一一個(gè)鼠標(biāo)每一次觸發(fā)時(shí)候的相關(guān)信息,和到底是在哪個(gè)元素上觸發(fā)的沒(méi)有關(guān)系

關(guān)于事件對(duì)象MouseEvent的兼容處理
(1)事件對(duì)象本身的獲取存在兼容問(wèn)題:標(biāo)準(zhǔn)瀏覽器中是瀏覽器給方法傳遞的參數(shù)绞灼,我們只需定義形參e就可以獲取到利术;在IE6-8中瀏覽器不會(huì)給方法傳遞參數(shù),我們?nèi)绻枰脑挼桶枰絯indow.event中獲取查找----->e=e||window.event;

oDiv.onclick=function(){
      e=e||window.event;
      //--->e.type:存儲(chǔ)的是當(dāng)前鼠標(biāo)觸發(fā)的行為類(lèi)型  "click"

      //--->e.clientX/e.clientY:當(dāng)前鼠標(biāo)觸發(fā)點(diǎn)距離當(dāng)前屏幕左上角的x/y軸的坐標(biāo)值

      //---->e.target:事件源印叁,當(dāng)前鼠標(biāo)觸發(fā)的是哪個(gè)元素,那么它存儲(chǔ)的就是哪個(gè)元素,但是在IE6-8中不存在這個(gè)屬性(e.target的值是undefined)轮蜕,我們使用e.srcElement來(lái)獲取事件源
      e.target=e.target||e.srcElement;

      //--->e.pageX/e.pageY:當(dāng)前鼠標(biāo)觸發(fā)點(diǎn)距離body左上角(頁(yè)面第一屏幕最左上端)的x/y軸的坐標(biāo)值昨悼,但是在IE6-8中沒(méi)有這個(gè)屬性。我們通過(guò)使用clientY+滾動(dòng)條卷去的高度獲取也可以
      e.pageX=e.pageX||(e.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
      e.pageY=e.pageY||(e.clientY+(document.documentElement.scrollTop||document.body.scrollTop));

      //--->e.preventDefault:阻止瀏覽器的默認(rèn)行為(如有時(shí)使用a標(biāo)簽跃洛,但點(diǎn)擊時(shí)并不想實(shí)現(xiàn)跳轉(zhuǎn))率触,在IE6-8中沒(méi)有這個(gè)方法,我們需要使用e.returnValue
      e.preventDefault?e.preventDefault():e.returnValue=false;//或者用return false也可以阻止默認(rèn)行為汇竭;

      //e.stopPropagation:阻止事件的冒泡傳播葱蝗,在IE6-8中不兼容,使用e.cancelBubble=true來(lái)代替
      e.stopPropagation?e.stopPropagation():e.cancelBubble=true;

      //e.keyCode:當(dāng)前鍵盤(pán)上每一個(gè)鍵對(duì)應(yīng)的值:空格鍵(space)-->32细燎;回退鍵(Backspace)--->8两曼;回車(chē)鍵(Enter)--->13;刪除鍵(Delete)--->46玻驻;四個(gè)方向鍵(左37 上38 右39 下40)
};

事件的傳播機(jī)制:

a悼凑、捕獲階段:從外向里依次查找元素
b、目標(biāo)階段:當(dāng)前事件源本身的操作
c击狮、冒泡階段:從內(nèi)到外依次觸發(fā)相關(guān)的行為(最常用的階段)

使用DOM 0級(jí)事件綁定給元素的某一個(gè)行為綁定的方法佛析,都是在行為觸發(fā)后的冒泡階段把方法執(zhí)行的

image.png

onmouseover/onmouseout與onmouseenter/onmouseleave區(qū)別:
都是鼠標(biāo)滑上去的行為,但是onmouseenter瀏覽器默認(rèn)阻止了它的冒泡傳播(這一級(jí)的onmouseenter行為觸發(fā)彪蓬,不會(huì)傳播到它的上一級(jí))寸莫;
而onmouseover是存在冒泡傳播的,想要阻止的話只能自己寫(xiě)代碼阻止

事件委托(shijiandaili):

利用事件的冒泡傳播機(jī)制(觸發(fā)當(dāng)前元素的某個(gè)行為档冬,它父級(jí)所有元素的相關(guān)行為都會(huì)被觸發(fā))膘茎,如果一個(gè)容器中有很多元素都要綁定點(diǎn)擊事件,我們沒(méi)有必要一個(gè)個(gè)的綁定了酷誓,只需要給最外層的容器綁定一個(gè)點(diǎn)擊事件即可披坏,在這個(gè)方法執(zhí)行的時(shí)候,通過(guò)事件源的區(qū)分來(lái)進(jìn)行不同的操作

document.body.onclick=function(e){
      e=e||window.event;
      e.target=e.target||e.srcElement;
      console.log(e.target.id);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盐数,一起剝皮案震驚了整個(gè)濱河市棒拂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玫氢,老刑警劉巖帚屉,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漾峡,居然都是意外死亡攻旦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)生逸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牢屋,“玉大人且预,你說(shuō)我怎么就攤上這事±游蓿” “怎么了锋谐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)皱炉。 經(jīng)常有香客問(wèn)我怀估,道長(zhǎng),這世上最難降的妖魔是什么合搅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任多搀,我火速辦了婚禮,結(jié)果婚禮上灾部,老公的妹妹穿的比我還像新娘康铭。我一直安慰自己,他們只是感情好赌髓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布从藤。 她就那樣靜靜地躺著,像睡著了一般锁蠕。 火紅的嫁衣襯著肌膚如雪夷野。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天荣倾,我揣著相機(jī)與錄音悯搔,去河邊找鬼。 笑死舌仍,一個(gè)胖子當(dāng)著我的面吹牛妒貌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铸豁,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼灌曙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了节芥?” 一聲冷哼從身側(cè)響起在刺,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎头镊,沒(méi)想到半個(gè)月后增炭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拧晕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梅垄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厂捞。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡输玷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出靡馁,到底是詐尸還是另有隱情欲鹏,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布臭墨,位于F島的核電站赔嚎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胧弛。R本人自食惡果不足惜尤误,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望结缚。 院中可真熱鬧损晤,春花似錦、人聲如沸红竭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)茵宪。三九已至最冰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稀火,已是汗流浹背暖哨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憾股,地道東北人鹿蜀。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像服球,于是被迫代替她去往敵國(guó)和親茴恰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,598評(píng)論 2 10
  • 第1章 鼠標(biāo)事件 1-1 jQuery鼠標(biāo)事件之click與dbclick事件 用交互操作中斩熊,最簡(jiǎn)單直接的操作就是...
    mo默22閱讀 1,263評(píng)論 0 6
  • 以下文章為轉(zhuǎn)載往枣,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助,淺顯易懂粉渠,特分享于此分冈。 什么是事件? 事件(E...
    jxyjxy閱讀 3,030評(píng)論 1 10
  • 那一年霸株,我五歲雕沉,你尚未出生,可我已經(jīng)開(kāi)始討厭你了去件。 早熟的我知道坡椒,你的出生會(huì)讓我失去專寵的地位扰路,你將搶去爸媽的寵愛(ài)...
    唯媽養(yǎng)娃閱讀 256評(píng)論 4 1
  • 【Gerber嘉寶是美國(guó)著名的寶寶食品品牌】酸奶小溶豆,一口一個(gè)倔叼,酸酸甜甜汗唱,入口即化。里面富含多種營(yíng)養(yǎng)元素丈攒,100...
    Lily5566閱讀 946評(píng)論 0 0