better-scroll是D8黃軼老師基于iscroll重寫的一個插件,在vue中使用這個插件能給App帶來流暢性,提高了用戶體驗。
封面.jpg
一、安裝
這個步驟非常重要,之前是通過npm install better-scroll --save 來安裝,這樣安裝的是最新版本。但是,實戰過程中發現了一個非常嚴重的bug,多次通過路由切換組件頁面滾動會無效,困擾了我很久很久。
于是,百度一下,發現根本沒有出現類似情況。
然后,猜測是版本問題而導致的,最后在package.json里手動安裝0.1.15版本,解決了這個問題。
//package.json
"dependencies": {
"better-scroll": "0.1.15"
}
//終端
npm install
二、html結構
div.wrapper > div.content > ul > li
在這里,分成4層結構。最外層一定要設置寬度以及定位,外層高度要100%,只能滾動第一個li,因此我們把元素全放到li標簽里即可。子元素可以有多個同級,但是子元素高度一定要大于父元素,這個是產生滾動的必要條件。
.wrapper{
width: 100%;
position: absolute;
top: 45px;
bottom: 50px; /*關鍵*/
overflow: hidden;
z-index: 1;
}
三、初始化
首先要引入組件,需要dom結構加載完成時才執行初始化($nextTick)。因此,需要用上鉤子函數created()或者mounted()。
<div class="wrapper" ref="wrapper">
<div class="content">
<ul>
<li></li>
</ul>
</div>
</div>
import BScroll from 'better-scroll'
mounted() {
this.$nextTick(() => {
//$refs綁定元素
if(!this.scroll){
this.scroll = new BScroll(this.$refs.wrapper, {
//開啟點擊事件 默認為false
click:true
})
// console.log(this.scroll)
}else if(!this.$refs.wrapper){
return
}
else{
this.scroll.refresh()
}
})
}
四、優點
1.體驗像原生:滾動非常流暢,而且沒有滾動條。
2.記錄當前路由滾動位置:在vue中通過路由切換頁面時組件會自動滾動到頂部,需要監聽滾動行為才能讓滾動位置固定,better-scroll解決了這個問題。
五、最后
如果這篇文章幫助到了你,麻煩點個贊~
demo.gif