移動端手指觸控螢幕過於頻繁,移動端會出現卡頓的現象,下面介紹幾種順暢滾動的解決辦法。
ios中獨有的屬性,屬性控制元素在移動裝置上是否使用滾動回彈效果.
overflow: scroll;
-webkit-overflow-scrolling: touch;//這個屬性可以實現,手指離開螢幕會慣性滑動一段距離
-webkit-overflow-scrolling: touch; /* 當手指從觸控螢幕上移開,會保持一段時間的滾動 ,繼續滾動的速度和持續的時間和滾動手勢的強烈程度成正比。同時也會建立乙個新的堆疊上下文。/
-webkit-overflow-scrolling: auto; / 當手指從觸控螢幕上移開,滾動會立即停止 */
熟悉瀏覽器渲染過程的小夥伴都知道。
頁面繪製的過程分為三個部分:layout、paint和合成。layout負責計算dom元素的布局關係,paint負責將dom元素繪製成位圖,合成則負責將位圖傳送給gpu繪製到螢幕上。
當某個dom元素開啟硬體加速之後,瀏覽器會為此元素單獨建立乙個「層」。當有單獨的層之後,此元素的repaint操作將只需要更新自己,不用影響到別人。
哪些會css屬性會建立新的層呢?
* it's the root object for the page
* it has explicit css position properties (relative, absolute or a transform)
* it is transparent
* has overflow, an alpha mask or reflection
* has a css filter
* corresponds to element that has a 3d (webgl) context or an * * * accelerated 2d context
* corresponds to a element
* 根元素
* position:absolute/relative ,+z-index(不為auto)
* display: flex|inline-flex +z-index(不為auto)
* position: fixed
* transform 不為 "none"
* -webkit-overflow-scrolling:touch
* opacity屬性值小於 1 的元素
* mix-blend-mode屬性值不為 "normal"的元素
* filter值不為「none」的元素
* perspective值不為「none」的元素
* isolation 屬性被設定為 "isolate"的元素
* will-change
參考:
1、每當觸發touchmove事件時,先延後執行相應的操作,設定乙個定時器。如果在定時期間內又出現新的touchmove事件,則取消剛剛的操作,重新設乙個定時器。以保證一連串的觸發動作後,最後乙個動作才真正的去執行相應的操作。
2、只有第一條顯然是不夠的,如果使用者一直不斷的觸發,就會一直得不到響應。所以還有設乙個固定的時間間隔,記住上一次執行操作的時間,比較本次和上一次執行了操作的時間差,大於固定的時間間隔的話,強制執行。
var previous = null;
var atleast = 10;
$('body').on('touchmove', function (e)
if (now - previous > atleast)
else,200);
}}
android 滑動卡頓問題彙總
布局巢狀 太依賴weight 使用多層weight布局等可能會引起應用的卡頓。這個是主要的原因,好多次遇到卡頓都是布局出了問題。現在手機的運算速率都比較高,所以可以優先考慮是不是布局的問題 布局巢狀還會引起其他錯誤。布局盡量簡潔。原因一 滑動的時候需要預載入資料導致ui卡頓 原因二 在onpages...
ios手機頁面滑動卡頓問題
說起來真是件悲傷的事情,開發了這麼多移動端頁面,今天犯了乙個低階,而我卻不知道的錯誤。因為現在移動裝置真是賊辣多,手機螢幕的高度,寬度各式各樣。所以我們有一些頁面高度不夠長,在iphone8x 三星長屏手機等頁面顯示不全,所以我開發的時候,有時候會給html和body都設定上height 100 所...
Mac SourceTree卡頓問題
git gc git prune 可是試過了,依舊非常卡,然後就開始各種檢查,最後找到問題的根源竟然是因為sourcetree讀取檔案太慢,開發iview admin專案會生成乙個package lock.json檔案,這個檔案我們一般是不需要提交到gitlab上的,這個檔案1,2萬行,每次都去讀取...