瀏覽器在移動端有一個默認觸摸滾動的效果,讓咱們感觸最深的莫過於微信瀏覽器裏面,下拉時自帶橡皮筋的效果。html
然而在開發的時候咱們常常須要阻止此效果。android
在此先直接給一個方案,直接加上下面的代碼便可:ios
document.body.addEventListener('touchmove', function (e) { e.preventDefault(); //阻止默認的處理方式(阻止下拉滑動的效果) }, {passive: false}); //passive 參數不能省略,用來兼容ios和android
若是不加passive:false
,在 ios 上是不能起做用的。瀏覽器
微信在 Android 端和 IOS 端使用的不是一樣的瀏覽器內核:微信
因此下面分別使用 Chrome 和 Safari 來分析。app
useCapture:false
表示事件採用冒泡機制(capture 譯爲 捕獲),瀏覽器默認就是false;passive:false
表示我如今主動告訴瀏覽器該監聽器將使用e.preventDefault()
來阻止瀏覽器默認的滾動行爲(能夠提升運行速度)。性能
在 Safari 中,有一個更新:spa
Updated root document touch event listeners to use passive mode improving scrolling performance and reducing crashes
更新了根文檔觸摸事件偵聽器,默認使用passive:true
提升滾動性能並減小崩潰
因此Safari 中默認使用了passive:true
,告訴瀏覽器,此監聽事件中,不會阻止默認的頁面滾動。這將致使設置的e.preventDefault()
代碼失效。code
因此 Safari 默認是不會阻止滾動的。orm
咱們經過 e.preventDefault(); 阻止默認的下拉滑動的效果,經過添加 passive:false 參數來兼容各個瀏覽器。便可實現阻止移動頁面滾動的功能。
關於 passive 在事件監聽中的做用,推薦你們看這篇文章:passive 的事件監聽器