麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > HTML5 > 正文

詳解webapp頁面滾動卡頓的解決辦法

2024-09-05 07:22:45
字體:
來源:轉載
供稿:網友

手機瀏覽器在滾動當前頁面(還可能是縮放頁面)時,由于默認行為被阻止,導致頁面被迫靜止,導致用戶使用體驗差,感覺滾動頁面有停頓感。

具體一點的解釋:由于 touchstart 事件對象的 cancelable 屬性為 true,也就是說它的默認行為可以被監聽器通過 preventDefault() 方法阻止。但瀏覽器無法預先知道一個監聽器會不會調用 preventDefault(),它能做的只有等監聽器執行完后再去執行默認行為,而監聽器執行是要耗時的,有些甚至耗時很明顯,這樣就會導致頁面卡頓。即便監聽器是個空函數,也會產生一定的卡頓,畢竟空函數的執行也會耗時。

addEventListener的useCapture參數

基本概念:xxx.addEventListener('事件名', function(xxx){xxx}, useCapture).

第一個參數表示事件名稱(不含 on,如 "click");第二個參數表示要接收事件處理的函數;第三個參數為 useCapture.

下面就來看看這個東西是個啥意思,直接舉例子說明更加直觀。

<div id="level1">  <div id="level2">    <div id="level3">請在此點擊</div>  </div></div><div id="info"></div>
var level1 = document.getElementById("level1");var level2 = document.getElementById("level2");var level3= document.getElementById("level3");var info = document.getElementById("info");outDiv.addEventListener("click", function () { info.innerHTML += "level1" + "<br>"; }, false);middleDiv.addEventListener("click", function () { info.innerHTML += "level2" + "<br>"; }, false);inDiv.addEventListener("click", function () { info.innerHTML += "level3" + "<br>"; }, false);

根據上述代碼來看這個 useCapture 為 true 和 false的作用效果:

全為 false 時,觸發順序為:level3、level2、level1
全為 true 時,觸發順序為:level1、level2、level3
level1為 true,其他為 false 時,觸發順序為:level1、level3、level2
level2為 true,其他為 false 時,觸發順序為:level2、level3、level1
level3為 true,其他為 false 時,觸發順序為:level3、level2、level1
level1為 false,其他為 true時,觸發順序為:level2、level3、level1
level2為 false,其他為 true時,觸發順序為:level1、level3、level2
level3為 false,其他為 true時,觸發順序為:level1、level2、level3

由上述結果得出如下結論:

true 的觸發順序總是在 false 之前;
如果多個均為 true,則外層的觸發先于內層;
如果多個均為 false,則內層的觸發先于外層。

passive屬性來控制事件行為

使用方式如下

addEventListener('事件名', function(xxx){xxx}, {    capture: false,    passive: false,    once: false})

三個屬性都是布爾類型的開關,默認值都為 false。

capture:等價于以前的 useCapture 參數;
once:就是表明該監聽器是一次性的,執行一次后就被自動 removeEventListener 掉;
passive:用于webapp的touch事件

據了解,在手機瀏覽器使用事件的時候,有 80% 的滾動事件監聽器是不會阻止默認行為的,也就是說大部分情況下,瀏覽器是白等了。所以,passive 監聽器誕生了,passive 的意思是“順從的”,表示它不會對事件的默認行為說 no,瀏覽器知道了一個監聽器是 passive 的,它就可以在兩個線程里同時執行監聽器中的 JavaScript 代碼和瀏覽器的默認行為了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线a亚洲视频播放在线观看 | 日韩在线播放第一页 | 中韩毛片 | 深夜视频福利 | 日韩激情一区二区三区 | 中文字幕在线视频网站 | 亚洲三区精品 | 久久久久久久久浪潮精品 | 99国产精成人午夜视频一区二区 | 99在线热播精品免费 | 日韩欧美激情视频 | 日韩视频一区二区在线观看 | 成人短视频在线播放 | 国产精品久久久久久久亚洲按摩 | 亚洲精品一区中文字幕 | 久久欧美亚洲另类专区91大神 | 黄色羞羞视频在线观看 | 久久亚洲精选 | 久久综合福利 | 免费久久久久 | 天天草天天干天天射 | 久色网站| 国产精品视频一区二区噜噜 | 国产精品久久久久久久久久iiiii | 久久久久亚洲美女啪啪 | 中文字幕亚洲视频 | 羞羞网站视频 | 国产91久久精品 | 久久久经典视频 | 色啪综合 | 久久精品一区二区三区四区五区 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | www.99久| 成人av一二三区 | 国产美女的小嫩bbb图片 | 国产日韩久久久久69影院 | 久久精品视频黄色 | 久久精品久久精品国产大片 | 一级做a爱视频 | 国产免费一区二区三区视频 | 亚洲av一级毛片特黄大片 |