移動端滑動卡頓問題

2022-04-29 07:42:10 字數 1835 閱讀 1182

移動端手指觸控螢幕過於頻繁,移動端會出現卡頓的現象,下面介紹幾種順暢滾動的解決辦法。

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萬行,每次都去讀取...