摘要:的處理事件注冊(cè)流程大致如下為了有事件冒泡以完成事件委派,一般情況下用代替在瀏覽器不支持的情況下,只能用在捕獲階段觸發(fā)回調(diào),間接做到事件委派。結(jié)果,就是有兩個(gè)機(jī)會(huì)在目標(biāo)對(duì)象上面操作事件。
--- | focusin、focusout | focus、blur |
---|---|---|
冒泡支持 | 支持 | 不支持 |
瀏覽器支持 | 現(xiàn)在所有瀏覽器都支持,但以前firefox52以下不支持 | 所有瀏覽器都支持 |
以下是經(jīng)簡(jiǎn)化后zepto處理注冊(cè)focus事件的代碼。運(yùn)行代碼,可以觀察到當(dāng)input獲得焦點(diǎn)時(shí)觸發(fā)了form注冊(cè)focus時(shí)的回調(diào)函數(shù)。
foucus事件委派
代碼比較少,下面說(shuō)一下重點(diǎn)。
zepto的處理focus事件注冊(cè)流程大致如下
為了有事件冒泡以完成事件委派,一般情況下zepto用focusin、focusout代替focus、blur
在瀏覽器不支持focusin、focusout的情況下,只能用focus、blur在捕獲階段觸發(fā)回調(diào),間接做到事件委派。
IE9開始使用DOM事件模型,zepto統(tǒng)一用addEventListener注冊(cè)事件,不支持IE9以下的版本,zepto中的on方法內(nèi)部調(diào)用add方法,add方法經(jīng)過(guò)多步處理,最后是這樣注冊(cè)一個(gè)事件的
form.addEventListener(realEvent("focus"), callback, eventCapture());
zepto是用以下方式來(lái)判斷瀏覽器是否支持focusin事件
var focusinSupported = "onfocusin" in window
除了IE,其他瀏覽器的window對(duì)象中都沒(méi)有onfocusin屬性,其他瀏覽器中focusinSupported為false,但其他瀏覽器也支持focusin,用addEventListener("focusin")是有效的。下表是zepto注冊(cè)focus事件的兩個(gè)重要判斷
--- | IE9+ | FF、Chrome |
---|---|---|
realEvent | focusinSupported:true, focus 轉(zhuǎn)換為 focusin | focusinSupported:false,focus 不作轉(zhuǎn)換 |
eventCapture | false,冒泡階段觸發(fā)回調(diào) | true,捕獲階段觸發(fā)回調(diào) |
在捕獲階段獲取目標(biāo)對(duì)象同樣可以實(shí)現(xiàn)事件委派,原因可以參考以下引用
即使"DOM2級(jí)事件"規(guī)范明確要求捕獲階段不會(huì)涉及事件目標(biāo)(作者注釋:即event.target),但I(xiàn)E9、Safari、Chrome、Firefox 和 Opera9.5及更高版本都會(huì)在捕獲階段觸發(fā)事件對(duì)象上的事件。結(jié)果,就是有兩個(gè)機(jī)會(huì)在目標(biāo)對(duì)象上面操作事件。注冊(cè)focusin事件<
>第三版 13.1.3 DOM事件流 p348
除了IE9-,在zepto中,其他主流瀏覽器都可以注冊(cè)focusin事件
總結(jié)現(xiàn)在所有瀏覽都已經(jīng)支持foucsin,未來(lái)屬于支持冒泡的focusin
參考MDN focusin瀏覽器支持
<
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92830.html
摘要:不支持事件冒泡帶來(lái)的直接后果是不能進(jìn)行事件委托,所以需要對(duì)和事件進(jìn)行模擬。調(diào)用函數(shù),分隔出參數(shù)的事件名和命名空間。這里判斷是否為函數(shù),即第一種傳參方式,調(diào)用函數(shù)的方法,將上下文對(duì)象作為的第一個(gè)參數(shù),如果存在,則與的參數(shù)合并。 Event 模塊是 Zepto 必備的模塊之一,由于對(duì) Event Api 不太熟,Event 對(duì)象也比較復(fù)雜,所以乍一看 Event 模塊的源碼,有點(diǎn)懵,細(xì)看下...
摘要:好啦我們已經(jīng)解決了是啥的疑問(wèn)了,現(xiàn)在回去開始一步步解讀如何實(shí)現(xiàn)手動(dòng)觸發(fā)事件。我們主要看看這里面幾乎含有如何手動(dòng)觸發(fā)一個(gè)事件的大部分步驟和內(nèi)容。 前言 前端在最近幾年實(shí)在火爆異常,vue、react、angular各路框架層出不窮,咱們要是不知道個(gè)雙向數(shù)據(jù)綁定,不曉得啥是虛擬DOM,也許就被鄙視了?;馃岬谋澈笸彩菬o(wú)盡的浮躁,學(xué)習(xí)這些先進(jìn)流行的類庫(kù)或者框架可以讓我們走的更快,但是靜下心...
摘要:好啦我們已經(jīng)解決了是啥的疑問(wèn)了,現(xiàn)在回去開始一步步解讀如何實(shí)現(xiàn)手動(dòng)觸發(fā)事件。我們主要看看這里面幾乎含有如何手動(dòng)觸發(fā)一個(gè)事件的大部分步驟和內(nèi)容。 前言 前端在最近幾年實(shí)在火爆異常,vue、react、angular各路框架層出不窮,咱們要是不知道個(gè)雙向數(shù)據(jù)綁定,不曉得啥是虛擬DOM,也許就被鄙視了?;馃岬谋澈笸彩菬o(wú)盡的浮躁,學(xué)習(xí)這些先進(jìn)流行的類庫(kù)或者框架可以讓我們走的更快,但是靜下心...
摘要:好啦我們已經(jīng)解決了是啥的疑問(wèn)了,現(xiàn)在回去開始一步步解讀如何實(shí)現(xiàn)手動(dòng)觸發(fā)事件。我們主要看看這里面幾乎含有如何手動(dòng)觸發(fā)一個(gè)事件的大部分步驟和內(nèi)容。 前言 前端在最近幾年實(shí)在火爆異常,vue、react、angular各路框架層出不窮,咱們要是不知道個(gè)雙向數(shù)據(jù)綁定,不曉得啥是虛擬DOM,也許就被鄙視了?;馃岬谋澈笸彩菬o(wú)盡的浮躁,學(xué)習(xí)這些先進(jìn)流行的類庫(kù)或者框架可以讓我們走的更快,但是靜下心...
摘要:寫在前面通過(guò)本文,您可以了解的事件模塊,之后到底發(fā)生了什么樣的事情,如何實(shí)現(xiàn)的事件委托,如何實(shí)現(xiàn)的自定義事件等問(wèn)題。個(gè)人理解這么做目的在于便于移除事件,這樣就可以使用匿名函數(shù),而且仍可以將該匿名函數(shù)移除。 寫在前面 通過(guò)本文,您可以了解zepto的事件模塊,$(selector).on之后到底發(fā)生了什么樣的事情,如何實(shí)現(xiàn)的事件委托【$(selector).delegate】,如何實(shí)現(xiàn)的...
閱讀 3151·2021-11-08 13:18
閱讀 2291·2019-08-30 15:55
閱讀 3614·2019-08-30 15:44
閱讀 3075·2019-08-30 13:07
閱讀 2786·2019-08-29 17:20
閱讀 1953·2019-08-29 13:03
閱讀 3419·2019-08-26 10:32
閱讀 3231·2019-08-26 10:15