摘要:這是因?yàn)榘姹疽院螅黾恿诵碌氖录东@機(jī)制就是告訴前頁面內(nèi)的事件監(jiān)聽器內(nèi)部是否會(huì)調(diào)用函數(shù)來阻止事件的默認(rèn)行為,以便瀏覽器根據(jù)這個(gè)信息更好地做出決策來優(yōu)化頁面性能。
Passive Event Listeners - 被動(dòng)事件監(jiān)聽器
在寫webapp頁面的時(shí)候,Chrome 提醒
[Violation] Added non-passive event listener to a scroll-blocking "touchstart" event. Consider marking event handler as "passive" to make the page more responsive.
翻譯過來如下:
違反:沒有添加被動(dòng)事件監(jiān)聽器來阻止"touchstart"事件,請(qǐng)考慮添加事件管理者"passive",以使頁面更加流暢。
出現(xiàn)如上提示這可能是由于console的過濾器選擇了Verbose
Verbose-冗長(zhǎng),就是事無具細(xì)的把所有l(wèi)og顯示出來
Info-顯示開發(fā)者自定義的log及錯(cuò)誤信息
Warnings-顯示危險(xiǎn)信息
Errors-顯示錯(cuò)誤信息
一般默認(rèn)的是Info,不會(huì)提示這個(gè)提醒,雖然這并不影響代碼的正常運(yùn)行,但 是既然提醒了還是弄明白是什么原因的好一些。
這是因?yàn)镃hrome51版本以后,Chrome增加了新的事件捕獲機(jī)制-Passive Event Listeners
Passive Event Listeners就是告訴前頁面內(nèi)的事件監(jiān)聽器內(nèi)部是否會(huì)調(diào)用preventDefault函數(shù)來阻止事件的默認(rèn)行為,以便瀏覽器根據(jù)這個(gè)信息更好地做出決策來優(yōu)化頁面性能。當(dāng)屬性passive的值為true的時(shí)候,代表該監(jiān)聽器內(nèi)部不會(huì)調(diào)用preventDefault函數(shù)來阻止默認(rèn)滑動(dòng)行為,Chrome瀏覽器稱這類型的監(jiān)聽器為被動(dòng)(passive)監(jiān)聽器。目前Chrome主要利用該特性來優(yōu)化頁面的滑動(dòng)性能,所以Passive Event Listeners特性當(dāng)前僅支持mousewheel/touch相關(guān)事件
以前的事件捕獲代碼如下:
document.addEventListener("click", fn, false/true)
第三個(gè)參數(shù)決定了fn函數(shù)是在冒泡還是捕獲階段觸發(fā)。
現(xiàn)在第三個(gè)參數(shù)不但可以是布爾值,還可是一個(gè)對(duì)象
document.addEventListener("mousewheel", fn, {passive: true})
由于passive對(duì)象只在Chrome瀏覽器中支持,所以這里需要做一個(gè)兼容處理
var passiveSupported = false; try { var options = Object.defineProperty({}, "passive", { get: function() { passiveSupported = true; } }); window.addEventListener("test", null, options); } catch(err) {} function fn() { console.log("fn") } document.addEventListener("mousewheel", fn, passiveSupported ? { passive: true } : false)
再看Chrome調(diào)試會(huì)發(fā)現(xiàn),Chrome已經(jīng)不要提醒讓人頭的提醒。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/87126.html
摘要:突然發(fā)現(xiàn)一個(gè)特性。這里核心是檢查是否支持,是什么提出的一個(gè)新的瀏覽器特性開發(fā)者通過一個(gè)新的屬性來告訴瀏覽器,當(dāng)前頁面內(nèi)注冊(cè)的事件監(jiān)聽器內(nèi)部是否會(huì)調(diào)用函數(shù)來阻止事件的默認(rèn)行為,以便瀏覽器根據(jù)這個(gè)信息更好地做出決策來優(yōu)化頁面性能。 今天我看源碼,因?yàn)橐贿吙匆贿呌浌P記所以看的慢。突然發(fā)現(xiàn)一個(gè)特性。所以單獨(dú)開一篇。感覺是一個(gè)秀bigger的特性,如果有一天面試官問你發(fā)現(xiàn)優(yōu)化頁面的時(shí)候,你提出可...
摘要:突然發(fā)現(xiàn)一個(gè)特性。這里核心是檢查是否支持,是什么提出的一個(gè)新的瀏覽器特性開發(fā)者通過一個(gè)新的屬性來告訴瀏覽器,當(dāng)前頁面內(nèi)注冊(cè)的事件監(jiān)聽器內(nèi)部是否會(huì)調(diào)用函數(shù)來阻止事件的默認(rèn)行為,以便瀏覽器根據(jù)這個(gè)信息更好地做出決策來優(yōu)化頁面性能。 今天我看源碼,因?yàn)橐贿吙匆贿呌浌P記所以看的慢。突然發(fā)現(xiàn)一個(gè)特性。所以單獨(dú)開一篇。感覺是一個(gè)秀bigger的特性,如果有一天面試官問你發(fā)現(xiàn)優(yōu)化頁面的時(shí)候,你提出可...
摘要:突然發(fā)現(xiàn)一個(gè)特性。這里核心是檢查是否支持,是什么提出的一個(gè)新的瀏覽器特性開發(fā)者通過一個(gè)新的屬性來告訴瀏覽器,當(dāng)前頁面內(nèi)注冊(cè)的事件監(jiān)聽器內(nèi)部是否會(huì)調(diào)用函數(shù)來阻止事件的默認(rèn)行為,以便瀏覽器根據(jù)這個(gè)信息更好地做出決策來優(yōu)化頁面性能。 今天我看源碼,因?yàn)橐贿吙匆贿呌浌P記所以看的慢。突然發(fā)現(xiàn)一個(gè)特性。所以單獨(dú)開一篇。感覺是一個(gè)秀bigger的特性,如果有一天面試官問你發(fā)現(xiàn)優(yōu)化頁面的時(shí)候,你提出可...
摘要:直接由合成線程處理的事件不經(jīng)過內(nèi)核線程就能快速處理的輸入事件為手勢(shì)輸入事件滑動(dòng)捏合。劃重點(diǎn)最騷的來了,雖然手勢(shì)事件可以不在內(nèi)核線程處理,但是手勢(shì)事件的產(chǎn)生還是離不開內(nèi)核線程。 passived到底有什么用? passived主要用于優(yōu)化瀏覽器頁面滾動(dòng)的性能,讓頁面滾動(dòng)更順滑~~ passived產(chǎn)生的歷史時(shí)間線 addEventListener():大家都是認(rèn)識(shí)的,為dom添加觸發(fā)事件...
摘要:場(chǎng)景當(dāng)頁面出現(xiàn)浮層的時(shí)候,滑動(dòng)浮層的內(nèi)容,正常情況下預(yù)期應(yīng)該是浮層下邊的內(nèi)容不會(huì)滾動(dòng)然而事實(shí)并非如此。當(dāng)屬性的值為的時(shí)候,代表該監(jiān)聽器內(nèi)部不會(huì)調(diào)用函數(shù)來阻止默認(rèn)滑動(dòng)行為,瀏覽器稱這類型的監(jiān)聽器為被動(dòng)監(jiān)聽器。 場(chǎng)景 當(dāng)頁面出現(xiàn)浮層的時(shí)候,滑動(dòng)浮層的內(nèi)容,正常情況下預(yù)期應(yīng)該是浮層下邊的內(nèi)容不會(huì)滾動(dòng);然而事實(shí)并非如此。showImg(https://user-gold-cdn.xitu.io...
閱讀 1794·2021-11-18 10:02
閱讀 3524·2021-11-16 11:45
閱讀 1786·2021-09-10 10:51
閱讀 2106·2019-08-30 15:43
閱讀 1372·2019-08-30 11:23
閱讀 1484·2019-08-29 11:07
閱讀 1892·2019-08-23 17:05
閱讀 1394·2019-08-23 16:14