摘要:說到事件機(jī)制首先要說一下事件模型原始事件模型在原始事件模型中,事件是不會傳播,只是觸發(fā)立即執(zhí)行,函數(shù)會作為元素的屬性被監(jiān)聽。標(biāo)準(zhǔn)函數(shù)綁定其中是否綁定在捕獲階段,表示采取捕獲方式,表示采取冒泡方式。
說到事件機(jī)制首先要說一下事件模型
1.原始事件模型在原始事件模型中,事件是不會傳播,只是觸發(fā)立即執(zhí)行,函數(shù)會作為元素的屬性被監(jiān)聽。 這種方式和這種方式document.querySelector(".box"); 這種時(shí)間模型有著明顯的缺點(diǎn):同一事件無法綁定多個(gè),無法傳播不能應(yīng)用事件委托.2.DOM2模型即2級DOM事件模型
w3c規(guī)定的標(biāo)準(zhǔn)事件模型,高版本瀏覽器基本遵循著一標(biāo)準(zhǔn)(gtmd ie)
事件模型中一次事件包含3個(gè)過程
事件捕獲階段:事件被從document一直向下傳播到目標(biāo)元素,在這過程中依次檢查經(jīng)過的節(jié)點(diǎn)是否注冊了該事件的監(jiān)聽函數(shù),若有則執(zhí)行。
(什么捕獲,神奇的ie我是不知道,你說什么反正我是聽不到的,哥是最屌的,gtmd ie)ie低版本沒有捕獲
事件處理階段:事件到達(dá)目標(biāo)元素,執(zhí)行目標(biāo)元素的事件處理函數(shù).
事件冒泡階段:事件從目標(biāo)元素上升一直到達(dá)document,同樣依次檢查經(jīng)過的節(jié)點(diǎn)是否注冊了該事件的監(jiān)聽函數(shù),有則執(zhí)行。
w3c標(biāo)準(zhǔn)函數(shù)綁定 function addEventListener(string eventFlag, function eventFunc,
useCapture)
其中useCapture是否綁定在捕獲階段,true表示采取捕獲方式,false表示采取冒泡方式。
節(jié)點(diǎn)既綁定了冒泡事件也綁定了捕獲事件,此時(shí)的執(zhí)行順序按照綁定的先后順序執(zhí)行。 因?yàn)閕e用自有的attachEvent函數(shù)綁定,所以監(jiān)聽的時(shí)候需要做兼容,為了方便封裝一下吧。
if (element.addEventListener) { element.addEventListener(type, fun, false); } else if(element.attachEvent){ element.attachEvent("on" + type, fun); } else{ element["on" + type] = fun; } }```
最近看了惰性函數(shù)的相關(guān),同一個(gè)應(yīng)用環(huán)境中,其實(shí)只需要檢測一次即可。
if (element.addEventListener) { addEvent = function (type, element, fun) { element.addEventListener(type, fun, false); } } else if(element.attachEvent){ addEvent = function (type, element, fun) { element.attachEvent("on" + type, fun); } } else{ addEvent = function (type, element, fun) { element["on" + type] = fun; } } }``` 第一次調(diào)用addEvent對瀏覽器做能力檢測,然后重寫addEvent。下次再調(diào)用的時(shí)候函數(shù)被重寫,不會再做檢測。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/83251.html
摘要:例如處理請求的線程處理事件的線程定時(shí)器線程讀寫文件的線程例如在中等等。事件循環(huán)事件循環(huán)是指主線程重復(fù)從消息隊(duì)列中取消息執(zhí)行的過程。事件觸發(fā)時(shí),表示異步任務(wù)完成,會將事件監(jiān)聽器函數(shù)封裝成一條消息放到消息隊(duì)列中,等待主線程執(zhí)行。 一. 單線程 我們常說JavaScript是單線程的。 所謂單線程,是指在JS引擎中負(fù)責(zé)解釋和執(zhí)行JavaScript代碼的線程只有一個(gè)。不妨叫它主線程。 但是實(shí)...
摘要:事件循環(huán)事件循環(huán)是指主線程重復(fù)從消息隊(duì)列中取消息執(zhí)行的過程。事件觸發(fā)時(shí),表示異步任務(wù)完成,會將事件監(jiān)聽器函數(shù)封裝成一條消息放到消息隊(duì)列中,等待主線程執(zhí)行。 一. 單線程 我們常說JavaScript是單線程的。 所謂單線程,是指在JS引擎中負(fù)責(zé)解釋和執(zhí)行JavaScript代碼的線程只有一個(gè)。不妨叫它主線程。 但是實(shí)際上還存在其他的線程。例如:處理AJAX請求的線程、處理DOM事件的線...
摘要:但如果一個(gè)組件在生命周期鉤子里改變父組件屬性,卻是可以的,因?yàn)檫@個(gè)鉤子函數(shù)是在更新父組件屬性變化之前調(diào)用的注即第步,在第步之前調(diào)用。 原文鏈接:Angular.js’ $digest is reborn in the newer version of Angular showImg(https://segmentfault.com/img/remote/146000001468785...
摘要:它是在的基礎(chǔ)上改進(jìn)的一種方案,通過對文件描述符上的事件狀態(tài)進(jìn)行判斷。檢索新的事件執(zhí)行與相關(guān)的回調(diào)幾乎所有情況下,除了關(guān)閉的回調(diào)函數(shù),它們由計(jì)時(shí)器和排定的之外,其余情況將在此處阻塞。執(zhí)行事件的,例如或者。 前言 學(xué)習(xí)Node就繞不開異步IO, 異步IO又與事件循環(huán)息息相關(guān), 而關(guān)于這一塊一直沒有仔細(xì)去了解整理過, 剛好最近在做項(xiàng)目的時(shí)候, 有了一些思考就記錄了下來, 希望能盡量將這一塊的...
摘要:列舉一個(gè)生活中的例子來幫助大家理解這一種模式。例子中的小明就是訂閱者訂閱的是飯涼了,而媽媽則是發(fā)布者將信號飯涼了發(fā)布出去。這樣就不用把小明和媽媽強(qiáng)耦合在一起,當(dāng)小明的弟弟妹妹都想在飯涼了在吃飯,只需告訴媽媽一聲。 關(guān)于事件 在我們使用javascript開發(fā)時(shí),我們會經(jīng)常用到很多事件,如點(diǎn)擊、鍵盤、鼠標(biāo)等等,這些物理性的事件。而我們今天所說的我稱之為事件的,是另一種形式的事件,訂閱--...
閱讀 2155·2021-11-12 10:36
閱讀 2147·2021-09-03 10:41
閱讀 2761·2021-08-19 10:57
閱讀 1230·2021-08-17 10:14
閱讀 1487·2019-08-30 15:53
閱讀 1210·2019-08-30 15:43
閱讀 975·2019-08-30 13:16
閱讀 2983·2019-08-29 16:56