摘要:事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時函數(shù)才會執(zhí)行。的事件流是事件捕獲流,事件由根元素獲取并沿樹向下分發(fā)。通過添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機制。
簡介
事件是可以被 JavaScript 偵測到的行為。
網(wǎng)頁中的每個元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。
事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時函數(shù)才會執(zhí)行。
執(zhí)行JS 事件的方式:
HTML 事件屬性可以直接執(zhí)行 JavaScript 代碼
HTML 事件屬性可以調(diào)用 JavaScript 函數(shù)
你可以為 HTML 元素指定自己的事件處理程序
你可以阻止事件的發(fā)生。
等等 ...
常用的JS事件 | type |
---|---|
鼠標單擊事件 | onclick |
鼠標經(jīng)過事件 | onmouseover |
鼠標移開事件 | onmouseout |
聚焦事件 | onfocus |
失焦事件 | onblur |
加載事件 | onload |
刷新頁面 | onunload(貌似只對IE有效) |
關(guān)閉頁面 | onbeforeunload(貌似只對IE有效) |
事件流描述的是從頁面中接受事件的順序。
IE 的事件流是事件冒泡流,事件由子元素獲取并沿DOM樹向上傳播。即事件最開始由最具體的元素(文檔中嵌套層次最深的那個節(jié)點)接收,然后逐級向上轉(zhuǎn)播至最不具體的節(jié)點(document),用 stopPropagation() 方法終止冒泡。
Netscape 的事件流是事件捕獲流,事件由根元素獲取并沿DOM樹向下分發(fā)。與事件冒泡流相反,事件捕獲的思想是不太具體的節(jié)點(document)應(yīng)該更早接收到事件,而最具體的節(jié)點最后接收到事件。已經(jīng)不適用了
Event 對象HTML DOM Event 對象
header 1 | header 2 |
---|---|
事件 | event |
事件目標 | event.target |
添加事件 | element.addEventListener(type, listener, false) |
移除事件 | element.removeEventListener(type, listener, false) |
阻止事件冒泡 | event.stopPropagation() |
取消默認行為 | event.preventDefault() |
IE 中的 Event 對象
header 1 | header 2 |
---|---|
事件 | window.event |
事件目標 | event.srcElement |
添加事件 | element.attachEvent("on" + type, listener) |
移除事件 | element.detachEvent("on" + type, listener) |
阻止事件冒泡 | event.cancelBubble = true |
取消默認行為 | event.returnValue = false |
HTML 事件處理程序
事件直接寫在html的元素里面,缺點:html和js代碼緊密的耦合在一起。
測試
0級 DOM事件處理程序
把一個函數(shù)賦值給一個事件的處理程序?qū)傩?,?yōu)點:比較簡單,跨瀏覽器支持。缺點:不能添加多個事件處理程序,最后一個事件會覆蓋前面的事件
document.getElementById("id").onclick = function () { alert(1); }
2級 DOM事件處理程序
通過 addeventlistener() 添加事件,只能用 removeEventlistener() 刪除此事件。它們都接收三個參數(shù):要處理的事件名event(不加"on")、作為事件處理程序的函數(shù)function(優(yōu)點:可以添加多個事件處理程序,)和一個布爾值useCapture。布爾參數(shù)僅僅在現(xiàn)代瀏覽器最近的幾個版本中是可加可不加的,并且true代表該事件在捕獲階段執(zhí)行,false代表在冒泡階段執(zhí)行,建議寫false,因為有些瀏覽器只有冒泡階段。
target.addEventListener(type, listener[, useCapture]); target.removeEventListener(type, listener[, useCapture]);
IE 事件處理程序
IE8 及更早IE版本不支持 addEventListener() 方法,Opera 7.0 及 Opera 更早版本也不支持。 但是,對于這些不支持該函數(shù)的瀏覽器,你可以使用 attachEvent() 方法來添加事件句柄。通過 attachEvent() 添加事件,只能用 detachEvent() 刪除此事件。這兩個方法接收相同的兩個參數(shù):事件處理程序名稱 type 與事件處理函數(shù) function,不支持第三個參數(shù)的原因:IE8--只支持冒泡冒泡流。
element.attachEvent(type, function) element.detachEvent(type, function)事件代理和委托
當(dāng)我們需要對很多元素添加事件的時候,可以通過將事件添加到它們的父節(jié)點而將事件委托給父節(jié)點來觸發(fā)處理函數(shù)。這主要得益于瀏覽器的事件冒泡機制。
跨瀏覽器兼容的事件處理程序(能力檢測)Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
/* * @Author: bxm09 * @Date: 2017-03-24 15:51:37 * @Last Modified by: bxm09 * @Last Modified time: 2017-07-24 13:16:04 * @Desc 跨瀏覽器兼容的事件處理程序(能力檢測) */ var eventshiv = { // event兼容 getEvent: function(event) { return event ? event : window.event; }, // type兼容 getType: function(event) { return event.type; }, // target兼容 getTarget: function(event) { return event.target ? event.target : event.srcelem; }, /** * 添加事件句柄 * 2級 DOM -> IE -> 0級 DOM */ addHandler: function(elem, type, listener) { if (elem.addEventListener) { elem.addEventListener(type, listener, false); } else if (elem.attachEvent) { elem.attachEvent("on" + type, listener); } else { // 在這里由于.與"on"字符串不能鏈接,只能用 [] elem["on" + type] = listener; } }, // 移除事件句柄 removeHandler: function(elem, type, listener) { if (elem.removeEventListener) { elem.removeEventListener(type, listener, false); } else if (elem.detachEvent) { elem.detachEvent("on" + type, listener); } else { elem["on" + type] = null; } }, /** * 添加事件代理 */ addAgent: function (elem, type, agent, listener) { elem.addEventListener(type, function (e) { if (e.target.matches(agent)) { listener.call(e.target, e); // this 指向 e.target } }); }, /** * 取消默認行為 * 非IE -> IE */ preventDefault: function(event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } }, /** * 阻止事件冒泡 * 非IE -> IE */ stopPropagation: function(event) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } } }; console.log("eventshiv.js 文件加載成功!");
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84265.html
摘要:事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時函數(shù)才會執(zhí)行。的事件流是事件捕獲流,事件由根元素獲取并沿樹向下分發(fā)。通過添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機制。 簡介 事件是可以被 JavaScript 偵測到的行為。 網(wǎng)頁中的每個元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。 事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時函數(shù)才會執(zhí)行。 執(zhí)行JS 事件的方式: ...
摘要:上面實現(xiàn)了遞歸調(diào)用,這樣做的好處是在前一個定時器代碼執(zhí)行完成之前,不會向隊列插入新的定時代碼,確保不會有任何的缺失間隔。而且,它保證在下一次定時器代碼執(zhí)行之前,至少要等待指定的時間間隔。 1.同步和異步 詳細~文章總結(jié): setTimeout(fn,ms)這個函數(shù),是經(jīng)過指定時間后,把要執(zhí)行的任務(wù)加入到Event Queue中,又因為是單線程任務(wù)要一個一個執(zhí)行,如果前面的任務(wù)需要的時間...
摘要:在布局規(guī)則中提到計算的高度時,浮動元素也參與計算。因此,父元素在計算其高度時,加入了浮動元素的高度,順便達成了清除浮動的目標,所以父元素就包裹住了子元素。 前端面試??贾R點---js 1.CSS3的新特性有哪些 點我查看 CSS3選擇器 . CSS3邊框與圓角 CSS3圓角border-radius:屬性值由兩個參數(shù)值構(gòu)成: value1 / value2,值之間用/分隔,v...
摘要:以下正文的部分內(nèi)容來自程序員面試筆試寶典書籍,如果轉(zhuǎn)載請保留出處一什么是是一個開源免費高性能的分布式對象緩存系統(tǒng),它基于一個存儲鍵值對的來存儲數(shù)據(jù)到內(nèi)存中。預(yù)告面試常考內(nèi)容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發(fā)布的PHP面試??純?nèi)容之面向?qū)ο髮n}后,發(fā)布的第二個專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點為以下幾點,更新時...
閱讀 1349·2021-11-23 09:51
閱讀 1687·2021-11-16 11:45
閱讀 4459·2021-10-09 09:43
閱讀 2824·2021-07-22 16:47
閱讀 1011·2019-08-27 10:55
閱讀 3522·2019-08-26 17:40
閱讀 3169·2019-08-26 11:39
閱讀 3313·2019-08-23 18:39