摘要:事件通常與函數配合使用,當事件發生時函數才會執行。的事件流是事件捕獲流,事件由根元素獲取并沿樹向下分發。通過添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機制。
簡介
事件是可以被 JavaScript 偵測到的行為。
網頁中的每個元素都可以產生某些可以觸發 JavaScript 函數或程序的事件。
事件通常與函數配合使用,當事件發生時函數才會執行。
執行JS 事件的方式:
HTML 事件屬性可以直接執行 JavaScript 代碼
HTML 事件屬性可以調用 JavaScript 函數
你可以為 HTML 元素指定自己的事件處理程序
你可以阻止事件的發生。
等等 ...
常用的JS事件 | type |
---|---|
鼠標單擊事件 | onclick |
鼠標經過事件 | onmouseover |
鼠標移開事件 | onmouseout |
聚焦事件 | onfocus |
失焦事件 | onblur |
加載事件 | onload |
刷新頁面 | onunload(貌似只對IE有效) |
關閉頁面 | onbeforeunload(貌似只對IE有效) |
事件流描述的是從頁面中接受事件的順序。
IE 的事件流是事件冒泡流,事件由子元素獲取并沿DOM樹向上傳播。即事件最開始由最具體的元素(文檔中嵌套層次最深的那個節點)接收,然后逐級向上轉播至最不具體的節點(document),用 stopPropagation() 方法終止冒泡。
Netscape 的事件流是事件捕獲流,事件由根元素獲取并沿DOM樹向下分發。與事件冒泡流相反,事件捕獲的思想是不太具體的節點(document)應該更早接收到事件,而最具體的節點最后接收到事件。已經不適用了
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事件處理程序
把一個函數賦值給一個事件的處理程序屬性,優點:比較簡單,跨瀏覽器支持。缺點:不能添加多個事件處理程序,最后一個事件會覆蓋前面的事件
document.getElementById("id").onclick = function () { alert(1); }
2級 DOM事件處理程序
通過 addeventlistener() 添加事件,只能用 removeEventlistener() 刪除此事件。它們都接收三個參數:要處理的事件名event(不加"on")、作為事件處理程序的函數function(優點:可以添加多個事件處理程序,)和一個布爾值useCapture。布爾參數僅僅在現代瀏覽器最近的幾個版本中是可加可不加的,并且true代表該事件在捕獲階段執行,false代表在冒泡階段執行,建議寫false,因為有些瀏覽器只有冒泡階段。
target.addEventListener(type, listener[, useCapture]); target.removeEventListener(type, listener[, useCapture]);
IE 事件處理程序
IE8 及更早IE版本不支持 addEventListener() 方法,Opera 7.0 及 Opera 更早版本也不支持。 但是,對于這些不支持該函數的瀏覽器,你可以使用 attachEvent() 方法來添加事件句柄。通過 attachEvent() 添加事件,只能用 detachEvent() 刪除此事件。這兩個方法接收相同的兩個參數:事件處理程序名稱 type 與事件處理函數 function,不支持第三個參數的原因:IE8--只支持冒泡冒泡流。
element.attachEvent(type, function) element.detachEvent(type, function)事件代理和委托
當我們需要對很多元素添加事件的時候,可以通過將事件添加到它們的父節點而將事件委托給父節點來觸發處理函數。這主要得益于瀏覽器的事件冒泡機制。
跨瀏覽器兼容的事件處理程序(能力檢測)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 文件加載成功!");
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84265.html
摘要:事件通常與函數配合使用,當事件發生時函數才會執行。的事件流是事件捕獲流,事件由根元素獲取并沿樹向下分發。通過添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機制。 簡介 事件是可以被 JavaScript 偵測到的行為。 網頁中的每個元素都可以產生某些可以觸發 JavaScript 函數或程序的事件。 事件通常與函數配合使用,當事件發生時函數才會執行。 執行JS 事件的方式: ...
摘要:上面實現了遞歸調用,這樣做的好處是在前一個定時器代碼執行完成之前,不會向隊列插入新的定時代碼,確保不會有任何的缺失間隔。而且,它保證在下一次定時器代碼執行之前,至少要等待指定的時間間隔。 1.同步和異步 詳細~文章總結: setTimeout(fn,ms)這個函數,是經過指定時間后,把要執行的任務加入到Event Queue中,又因為是單線程任務要一個一個執行,如果前面的任務需要的時間...
摘要:在布局規則中提到計算的高度時,浮動元素也參與計算。因此,父元素在計算其高度時,加入了浮動元素的高度,順便達成了清除浮動的目標,所以父元素就包裹住了子元素。 前端面試常考知識點---js 1.CSS3的新特性有哪些 點我查看 CSS3選擇器 . CSS3邊框與圓角 CSS3圓角border-radius:屬性值由兩個參數值構成: value1 / value2,值之間用/分隔,v...
摘要:以下正文的部分內容來自程序員面試筆試寶典書籍,如果轉載請保留出處一什么是是一個開源免費高性能的分布式對象緩存系統,它基于一個存儲鍵值對的來存儲數據到內存中。預告面試常考內容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發布的PHP面試常考內容之面向對象專題后,發布的第二個專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內容點為以下幾點,更新時...
閱讀 1272·2021-11-23 09:51
閱讀 1633·2021-11-16 11:45
閱讀 4049·2021-10-09 09:43
閱讀 2689·2021-07-22 16:47
閱讀 951·2019-08-27 10:55
閱讀 3454·2019-08-26 17:40
閱讀 3093·2019-08-26 11:39
閱讀 3234·2019-08-23 18:39