BetterScroll是一款开源插件(GitHub地址),专注于解决移动端各种滚动场景的需求。具有以下功能,支持滚动列表、下拉刷新、上拉刷新、轮播图、滑块等功能。为了满足这些功能,better-scroll通过惯性滚动、边框回弹、滚动条淡入淡出等方式保证滚动流畅。同时,它也支持很多API和事件。具体支持的活动可以查看官网了解详情。因为它是基于原生JavaScript的,不依赖于任何框架,所以可以被原生JavaScript引用,也可以结合现在的前端MVVM框架使用。比如其官网的例子就是结合Vue.使用方法:在说使用方法之前,我们先来了解一下它的滚动原理:在浏览器的滚动中,当内容的高度高于外层容器的高度时,就会出现滚动条。我们可以通过使用滚动条来查看多余的部分。better-scroll的原理就是基于此,content部分的width/height必须大于outerwidth/height。所以在使用的时候需要把外部容器设置成固定宽度,还有一个问题需要设置成overflow:hidden,因为是为了隐藏多余的部分。然后什么时候初始化better-scroll,这个有点麻烦,幸好作者已经在vue框架下封装好了,我们只需要像麻瓜一样填就行了。但是有一点需要注意:滚动元素只能是第一个容器的第一个元素。源码如下://this.scroller是滚动的内容,this.wrapper是容器this.scroller=this.wrapper.children[0]如果我们需要滚动多个内容怎么办,用一个元素包裹起来,只需将其设为容器的第一个子元素即可。说完如何使用,再来说说源码。毕竟这是一篇源码分析文章的核心代码:1.scrollToscrollTo()函数是better-scroll非常核心的一个函数。其实我们在调用scrollToElement的时候,是在内部执行的。操作还是scrollTofunctionBScroll.prototype.scrollTo=function(x,y,time=0,easing=ease.bounce){//useTransition是否使用css3transition,isInTransition表示是否在滚动过程中//this.x表示平移后位置或初始化this.x=0this.isInTransition=this.options.useTransition&&time>0&&(x!==this.x||y!==this.y)//如果transition是used,callit一系列的transition设置,默认为true会改变this.xthis._translate(x,y)//time有一个protoType表示不仅在滑动屏幕的时候,动量滚动动画运行的时候也会实时调度scroll事件if(time&&this.options.probeType===3){//thisfunction函数是派发滚动事件this._startProbe()}//wheel用于picker组件设置,不用担心if(this.options.wheel){if(y>0){this.selectedIndex=0}elseif(y
