js事件總結(jié)

什么是事件:

事件是交互體驗的核心功能


一.事件冒泡:

當(dāng)一個事件發(fā)生時,這個事件會從內(nèi)向外逐層傳遞揍魂。

二.為什么會有事件冒泡:

因為該事件源本身可能沒有處理該事件的能力,所以事件源會把事件交給父級處理

三.事件捕獲:

事件捕獲和事件冒泡正好是相反的順序


標(biāo)準(zhǔn)瀏覽器:

1.Dom.addEventListener(‘click’,function(){},false);

為dom對象添加一個事件監(jiān)聽器 棚瘟,與直接綁定的方式不同 直接綁定的方式 綁定函數(shù)只執(zhí)行一次

addEventListener()可以多次使用重復(fù)執(zhí)行 這里添加的事件處理程序是在其依副的元素作用域中運行

第一個參數(shù)是事件類型现斋,第二個參數(shù)是回調(diào)函數(shù)(即用來執(zhí)行的代碼),第三個參數(shù)默認(rèn)為false偎蘸,當(dāng)改為true時庄蹋,代表事件捕獲瞬内;

2.Dom.removeEventListener('click',function(){});

為dom對象移除監(jiān)聽器,用addEventListener()綁定的事件只能用removeEventListener()解除

removeEventListener()第一個參數(shù)是事件類型限书,第二個是要移除的回調(diào)函數(shù)

IE瀏覽器:

dom.attachEvent(‘onclick’,function(){})

dom.detachEvent(‘onclick’,function(){})

在使用attachEvent()方法的情況下虫蝶,事件處理程序在全局作用域下運行,其中的this等于window倦西。并且用attachEvent()添加的這些事件處理程序不是以添加他們的順序執(zhí)行秉扑,而是以相反的順序觸發(fā)


語句綁定的方式:

Btn.onclick=function(){…};//綁定

Btn.onckick-null;//解除綁定


eg:

var EventUtil = {

addHandler: function(element,type,handler) {

if(element.addEventListener) {

element.addEventListener(type,handler,false);

}else if(element.attachEvent) {

element.attachEvent("on"+type,handler);

}else {

element["on" +type] = handler;

}

},

removeHandler: function(element,type,handler){

if(element.removeEventListener) {

element.removeEventListener(type,handler,false);

}else if(element.detachEvent) {

element.detachEvent("on"+type,handler);

}else {

element["on" +type] = null;

}

}

};

兩種綁定事件的區(qū)別:

句柄綁定:當(dāng)前this指向當(dāng)前節(jié)點 支持事件冒泡 不能重復(fù)綁定 重復(fù)綁定會導(dǎo)致覆蓋

監(jiān)聽器綁定:當(dāng)前this指向當(dāng)前元素 支持事件冒泡和捕獲 可以重復(fù)多次進行事件綁定

ie事件綁定:當(dāng)前this不指向當(dāng)前元素 不支持事件捕獲 可以重復(fù)多次進行事件綁定



三.currentTarget與target:

currentTarget等于this,target等于當(dāng)前元素

例如:點擊了button按鈕 但是當(dāng)按鈕沒有綁定點擊事件時該事件便會冒泡到可以處理該事件的父級中(假定是body)调限,那么此時currentTarget=this=body,target=button误澳。

所以target指向觸發(fā)事件的對象耻矮,currentTarget指向處理事件的對象


四.標(biāo)準(zhǔn)瀏覽器和IE瀏覽器的事件對象:

標(biāo)準(zhǔn)瀏覽器下事件對象是event,打印目標(biāo)對象:event.target

IE瀏覽器下事件對象是window.event,打印目標(biāo)對象:window.event.srcElement


五.阻止對象默認(rèn)行為:

標(biāo)準(zhǔn)瀏覽器:event.preventDefault()忆谓;

IE瀏覽器:window.event.returnValue=false;


六.阻止事件冒泡:

標(biāo)準(zhǔn)瀏覽器:event.stopPropagation();

IE瀏覽器:window.event.cancel.Bubble=true裆装;


Eg:

varEventUtil = {

addHandler:function(element,type,handler) {

if(element.addEventListener) {

element.addEventListener(type,handler,false);

}elseif(element.attachEvent) {

element.attachEvent("on"+type,handler);

}else{

element["on" +type] = handler;

}

},

removeHandler:function(element,type,handler){

if(element.removeEventListener) {

element.removeEventListener(type,handler,false);

}elseif(element.detachEvent) {

element.detachEvent("on"+type,handler);

}else{

element["on" +type] =null;

}

},

getEvent:function(event) {

returnevent ? event : window.event;

},

getTarget:function(event) {

returnevent.target || event.srcElement;

},

preventDefault:function(event){

if(event.preventDefault) {

event.preventDefault();

}else{

event.returnValue =false;

}

},

stopPropagation:function(event) {

if(event.stopPropagation) {

event.stopPropagation();

}else{

event.cancelBubble =true;

}

}

};


七.焦點事件:

blur:在元素失去焦點時觸發(fā),這個事件不會冒泡倡缠,所有瀏覽器都支持哨免。

foucs:在元素獲得焦點時觸發(fā),這個事件不會冒泡昙沦,所有瀏覽器都支持琢唾。

八.鼠標(biāo)事件:

1.click事件:在用戶單擊鼠標(biāo)按鈕或者按下回車鍵觸發(fā);

2.dblclick事件:在用戶雙擊鼠標(biāo)按鈕時被觸發(fā)盾饮;

3.mousedown事件:在用戶按下了任意鼠標(biāo)按鈕時被觸發(fā)采桃,mousedown的事件對象中有一個屬性叫做button枕稀,這個屬性的值是0的時候代表我們按下的是左鍵树肃,1的時候代表按下的中鍵辩蛋,2的時候代表按下的是右鍵脸秽。

4.mouseenter事件:在鼠標(biāo)光標(biāo)從元素外部移動到元素范圍之內(nèi)被觸發(fā)

5.mousemove事件:當(dāng)鼠標(biāo)指針在元素內(nèi)部移動時重復(fù)地觸發(fā)澳淑。

6.mouseout事件:用戶將其移入另一個元素內(nèi)被觸發(fā)臭胜。

7.mouseover事件:鼠標(biāo)指針在元素外部还最,用戶將移入另一個元素的邊界時觸發(fā)芭逝,感覺和mouseenter事件類似呈础;

8.mouseup事件:用戶釋放鼠標(biāo)按鈕時觸發(fā)舆驶;

除了mouseenter和mouseleave,所有鼠標(biāo)事件都會冒泡

所有的鼠標(biāo)事件都有clientX和clientY而钞,代表的是鼠標(biāo)點擊的位置贞远,我們可以通過e.clientX和e.clentY來查看。


Eg:

拖拽事件的實現(xiàn):

var div = document.getElementsByTagName('div')[0]

function drag(elem) {

var disX,

dixY;

addEvent(elem, 'mousedown', function (e) {

var event = e || window.event;

disX = event.clientX - parseInt(getStyle(elem, 'left'));

disY = event.clientY - parseInt(getStyle(elem, 'top'));

addEvent(document, 'mousemove', mouseMove);

addEvent(document, 'mouseup', mouseUp);

stopBubble(e);

cancelHandler(e);

});

function mouseMove(e) {

var event = e || window.event;

elem.style.left = event.clientX - disX + 'px';

elem.style.top = event.clientY - disY + 'px';

}

function mouseUp (e) {

removeEvent(document, 'mousemove', mouseMove);

removeEvent(document, 'mouseup', arguments.callee);

}

}


九.事件委托:

利用事件源對象和事件冒泡來處理的方式就叫做事件委托笨忌。

十.事件委托的優(yōu)點:

1.性能不需要循環(huán)所有的子元素一個個綁定事件

2.靈活當(dāng)有新的子元素被加入的時候不需要重新綁定事件


十一.鍵盤事件:

當(dāng)用戶按下鍵盤時鍵盤的觸發(fā)順序分別是keydown蓝仲、keypress、keyup。

keydown和keypress:

1.相同點:

當(dāng)用戶按住鍵盤不放時兩者會一直響應(yīng)下去

keyCode和which每個方法都有袱结,表示的是這個鍵的唯一標(biāo)示亮隙,可以告訴瀏覽器我們按下的是鍵盤上的哪一個鍵,比如空格是32垢夹,32就代表空格溢吻。不過我們一般都用which,keyCode用的較少果元。

2.不同點:

keydown可以響應(yīng)所有按鍵促王,keypress只響應(yīng)字符按鍵(即有ascii碼的按鍵)

keypress有charCode屬性這個屬性代表這個字符的ASCII碼,配合SHIFT之類的按鍵可以直接獲取大寫字母等而晒。

String上有一個方法叫做fromCharCode蝇狼,可以接受一個Unicode值(包含ASCII值),然后返回對應(yīng)的字符串倡怎,我們可以配合這個方法和charCode來直接獲取輸入的字符迅耘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市监署,隨后出現(xiàn)的幾起案子颤专,更是在濱河造成了極大的恐慌,老刑警劉巖钠乏,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栖秕,死亡現(xiàn)場離奇詭異,居然都是意外死亡晓避,警方通過查閱死者的電腦和手機累魔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來够滑,“玉大人垦写,你說我怎么就攤上這事≌么ィ” “怎么了梯投?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長况毅。 經(jīng)常有香客問我分蓖,道長,這世上最難降的妖魔是什么尔许? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任么鹤,我火速辦了婚禮,結(jié)果婚禮上味廊,老公的妹妹穿的比我還像新娘蒸甜。我一直安慰自己棠耕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布柠新。 她就那樣靜靜地躺著窍荧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恨憎。 梳的紋絲不亂的頭發(fā)上蕊退,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音憔恳,去河邊找鬼瓤荔。 笑死,一個胖子當(dāng)著我的面吹牛钥组,可吹牛的內(nèi)容都是我干的输硝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼者铜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了放椰?” 一聲冷哼從身側(cè)響起作烟,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砾医,沒想到半個月后拿撩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡如蚜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年压恒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错邦。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡探赫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撬呢,到底是詐尸還是另有隱情伦吠,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布魂拦,位于F島的核電站毛仪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芯勘。R本人自食惡果不足惜箱靴,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荷愕。 院中可真熱鬧衡怀,春花似錦棍矛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝶桶,卻和暖如春慨绳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背真竖。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工脐雪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恢共。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓战秋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讨韭。 傳聞我的和親對象是個殘疾皇子脂信,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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

  • 以下文章為轉(zhuǎn)載,對理解JavaScript中的事件處理機制很有幫助透硝,淺顯易懂狰闪,特分享于此。 什么是事件濒生? 事件(E...
    jxyjxy閱讀 3,037評論 1 10
  • 事件源對象 event.srcElement.tagName event.srcElement.type 捕獲釋放...
    孤魂草閱讀 889評論 0 0
  • 聲明:本文來源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 7,018評論 1 6
  • 事件流: 事件流:頁面接收事件的順序埋泵。 IE定義的:事件冒泡流(由最具體的元素依次傳播到DOM樹的最上層的Docu...
    xiaoguo16閱讀 589評論 0 0
  • 什么是事件: 我們可以簡單的把事件理解為瀏覽器的感知系統(tǒng)。比如說:他可以感覺到用戶是否點擊(click)了頁面罪治、鼠...
    張松1366閱讀 6,794評論 1 6