当前位置: 代码迷 >> 综合 >> vue 关于BetterScroll不能滑动问题
  详细解决方案

vue 关于BetterScroll不能滑动问题

热度:29   发布时间:2024-03-07 19:54:08.0

在我们的开发中,用vue开发移动端时,如果使用原生滚动的话,在模拟器上面不会出现什么问题,但到了真机上面就会出现滑动不流畅的问题。那么我们可以使用滑动插件来解决这个问题,下面我们来说一下betterscroll这个滑动插件

betterscroll是目前比较好用的一个滑动插件,但是第一次使用的时候总会出现一些问题,使得betterscroll无法达到预期的使用效果,下面就来说一下我觉得会出现的问题

1.页面不能滚动,但可以使用原生滚动

出现这个问题的原因可能是没有设置固定的滚动区域高度

  <div class="wrapper"><div class="content"><slot></slot></div></div>

在BetterScroll的官方文档里,wrapper是父容器,要有固定的高度,content是用来放可滚动内容的,当content里的内容高度大于wrapper高度就可以实现滚动了,注意这里的高度不能直接写100%,除非它的父级,或者整个页面有固定的高度(100vh)

2.可以滚动,但是滚动一下又不能继续往下滚动

出现这个问题的是:可滚动高度还没有来的及刷新页面已经构建完成了

我们往滑动区域里面添加一些从网络请求下来的东西,但网络请求可能比较慢,还没有请求完成,但页面已经构建完成了,这个时候的可滑动高度是按构建完成时的高度来算的,后面请求来的东西是加进页面里面了,但是可滑动高度还是按页面构建完成时的高度来算的,也就是后面加进来的东西是不能滑动的。

解决方法:

方法一:如果页面加载图片比较多,可以监听图片加载完成,在刷新滑动高度(重新计数可滑动高度)

  <div class="wrapper"><div class="content"><img :src="i" alt="" class="detailImage" style="width: 100%" @load="imgLoad"></div></div>data(){return{num: 0,imgLength:0}},watch:{//监听数组变化detailInfo(){this.imgLength = this.img.list.length},}methods:{refresh(){// 重新计数滑动高度this.scroll && this.scroll.refresh()},imgLoad(){//判断图片加载完进行一次回调(最后一张图片加载完成时回调)if(++this.num === this.imgLength){this.refresh()}}},

注意:(这只是代码片段)代码不完整,复制应该不能运行

方法二:

直接监听数组变化,数组有变化就刷新可滑动高度,(不建议使用这种方法,因为数组一变化就刷新,刷新太频繁会影响性能)。

方法三:

监听下拉事件,下拉刷新可滑动高度,

3.完全无法滚动

出现这个问题的原因可能是可滑动高度小于固定的滚动区域高度。

  相关解决方案