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,解绑事件