better scroll踩坑合集

2022-09-06 01:51:09 字數 2473 閱讀 2813

better-scroll

github

最近專案使用了better-scroll這個外掛程式,這個外掛程式用起來還是有不少問題的。

除了普遍會遇到的無法滾動、無法點選等問題,這些作者都已經說得很清楚了。下面說說我遇到的其他問題及解決方法。

1.無法響應滑鼠滾輪滾動:

無法點選大家都知道了,在建立bscroll時傳入配置即可。但是在pc端時,你會發現滾輪無法使內容滾動,而且文件也沒有相關說明!看了原始碼後,發現配置乙個mousewheel選項即可解決:

const scrollconfig =;

2.scrollbeh**ior與better-scroll不相容

vue的scrollbeh**ior可以用於配置路由,比如說滾動到錨點。但是如果你的錨點是在bscroll容器中,scrollbeh**ior就失效了。解決:

mounted()  

else

}});

},

3.點選一次多次觸發

當設定click: true,點選bscroll容器的元素時,會觸發兩次甚至多次click事件。這個問題在iscroll中也存在。解決辦法:

引入fastclick外掛程式。

原理不明。

4.position: fixed失效!

bscroll的滾動是用transformtranslate來進行偏移,但是父元素設定了transform,所有子元素的position: fixed都不再相對於視口,而是相對於這個transform父元素!這不是什麼bug,而是規範中規定。一直以為fixed定位霸道至極,沒想到transform可以改變它的定位,學到了。

參考這樣的話,bscroll容器內的fixed定位元素就全亂套了。

google了一番,除了把fixed元素放出來,沒有什麼好辦法。有的人也說了:如果乙個元素是fixed定位,它就不應該被其他元素包裹,直接放到根元素下。

但是,你要知道,如果是使用第三方的元件庫,比如element、antdesign,我想改也改不了啊!

5.內層有原生滾動

內層有原生滾動會引起兩個問題:

(1) pc端當滑鼠移動到原生滾動元素上,滾動滾輪,內層原生滾動無響應!倒是bscroll容器發生了滾動,就好像內層這個滾動完全不存在。

解決辦法,阻止內層滾動的冒泡:

menu.addeventlistener('wheel', (e) =>);

同樣的,如果元素是第三方的元件,改起來很煩。

(2)移動端,引起外層抖動!

同樣是因為事件冒泡到外層,導致裡面滾,外面也滾。體驗極差。解決辦法:

menu.addeventlistener('touchstart', (e) =>);

同樣的,如果元素是第三方的元件,改起來很煩。

6.滾動條位置

我有兩個並列的scroll,一左一右。但是左邊scroll的滾動條竟然去到了瀏覽器右邊,檢視了一下屬性為right: 0。解決辦法,覆蓋樣式:

/deep/ div.bscroll-vertical-scrollbar

7.監聽事件

如何監聽事件文件中也沒有說:

bscroll.on('scroll', () => {});

8.容器需要固定高度

容器需要固定高度,這本來也沒什麼。如果高度是百分比,以適應容器父元素的高度變化。但是如果父元素也沒有高度呢?大家都知道,父元素沒高度時,子元素height: 100%是無效的。我父元素要flex: 1自適應,這也是沒有高度的,父元素設定height: 100%也是無效的。那麼如何讓父元素有高度又能自適應呢?

解決辦法:

position: absolute;

height: 100%;

下面是我查問題時在issue看到的一些問題,記錄下來。(順便吐槽一下,issue也太亂了吧,完全把issue當貼吧了!github幾時能出個刪issue的功能啊!)

雙層巢狀問題

雙層巢狀使用了stoppropagation: true,但是裡面的滾動如果滾到底或者滾到頂部,觸發不了最外層的滾動。

解決辦法:內層滾動到底或者滾到頂部時,內層呼叫disable進行禁止,然後外層呼叫enable啟用。

最後,如果你不開啟preventdefault: false,許多原生的效果都會失效。transform滾動也注定了原生滾動的失效。

總結使用心得:pc端沒必要引入!當初是考慮到專案要相容移動端才引入的。但沒想到帶來那麼多問題。如果移動端要做回彈動畫、下拉重新整理、無限滾動效果,是可以考慮使用的。如果要引入,可以做一下相容:在移動端時使用這個外掛程式,而在pc端時,呼叫destory方法銷毀bscroll,使用原生。

better scroll在vue中的坑

在我們日常的移動端專案開發中,處理滾動列表是再常見不過的需求了,以滴滴為例,可以是這樣豎向滾動的列表,如圖所示 也可以是橫向滾動的導航欄,如圖所示 我們在實現這類滾動功能的時候,會用到我寫的第三方庫,better scroll。什麼是 better scroll better scroll 是乙個移...

systemtap embedded C 踩坑筆記

官方文件 systemtap的embedded c中,不能 include 也不能用printf和print。那怎麼列印呢?用stap printf。用法與printf一樣。還可以訪問cript中的全域性變數。官方文件中的示例 global var global var2 100 function ...

Aggregation MongoDB踩坑記錄

對某些篩選條件進行分頁查詢,開始每一頁的有效data都不足pagesize,最後發現,aggregation 的pipeline是有先後順序的。錯誤 agg aggregation.newaggregation aggregation.skip curpage 1 pagesize aggregat...