better-scroll 是一個頁面滾動插件,用它能夠很方便的實現下拉刷新,錨點滾動等功能。javascript
實現原理:父容器固定高度,並設置 overflow:hidden,子元素超出父元素高度後將被隱藏,超出部分可滾動且沒有滾動條。html
github地址vue
<body> <div id="wrapper"> <ul> <li>...</li> <li>...</li> ... </ul> </div> <script type="text/javascript" src="better-scroll.js"></script> <script type="text/javascript"> new BScroll(document.getElementById(‘wrapper‘)); </script> </body>
安裝 better-scroll npm install better-scrolljava
頁面中引入 better-scroll import BScroll from ‘better-scroll‘git
若是不支持 import,可以使用 var BScroll = require(‘better-scroll‘)github
頁面結構:npm
<div id="wrapper" ref="wrapper"> <ul class="container"> <li>...</li> <li>...</li> ... </ul> </div>
注意:better-scroll 會將點擊事件去掉,若是滾動部分須要有點擊事件,須要在參數里加上 click:true。 同時,在 PC 上或某些手機端,因爲未成功將 touchend 事件 move 掉,點擊事件會執行兩次。 better-scroll 派發的 event 事件和原生 js 的 event 有屬性上的區別,其中有一個屬性爲 event._constructed。better-scroll 派發的事件中 event._constructed 爲 true,原生點擊事件中沒有這個屬性。瀏覽器
selectList(index,event){ if(!event._constructed){//若是不存在這個屬性,則爲原生點擊事件,不執行下面的函數 return } }
根據官方 API 的解釋可知,一些須要在頁面數據變化完成後才執行的函數須要寫在 $nextTick 中 。app
this.$nextTick(() => { this._initScroll() })
Options 參數dom
Events 事件
let scroll = new BScroll(document.getElementById('wrapper'),{
cilick: true, probeType: 3
}) scroll.on('scroll', (pos) => { console.log(pos.x + '~' + pos.y) })
```
函數列表
scrollTo(x, y, time, easing) 滾動到某個位置,x,y 表明座標,time 表示動畫時間,easing 表示緩動函數
scroll.scrollTo(0, 500) scrollToElement(el, time, offsetX, offsetY, easing) 滾動到某個元素,el(必填)表示 dom 元素,time 表示動畫時間,offsetX 和 offsetY 表示座標偏移量,easing 表示緩動函數
refresh() 強制 scroll 從新計算,當 better-scroll 中的元素髮生變化的時候調用此方法
getCurrentPage() snap 爲 true 時,獲取滾動的當前頁,返回的對象結構爲 {x, y, pageX, pageY},其中 x,y 表明滾動橫向和縱向的位置;pageX,pageY 表示橫向和縱向的頁面索引。用法如:getCurrentPage().pageX
goToPage(x, y, time, easing) snap 爲 true,滾動到對應的頁面,x 表示橫向頁面索引,y 表示縱向頁面索引, time 表示動畫,easing 表示緩動函數(可省略不寫)
enable() 啓用 better-scroll,默認開啓
disable() 禁用 better-scroll
destroy() 銷燬 better-scroll,解綁事件