vue better-scroll

better-scroll无法滚动bug

Posted by Jeremy on August 24, 2018

问题

使用better-scroll出现无法拉动页面的情况

之前的一个移动端项目使用better-scroll插件时会偶尔出现页面无法拉动的情况(只能滑动到红线处) 往上拉可以看到下面的内容,但是松手后就会回到红线处

解决

发现问题

使用better-scroll初始化时要在数据加载完成后,因为它在初始化的时候, 会计算父元素和子元素的高度和宽度,来决定是否可以纵向和横向滚动。从控 制台打印better-scroll对象会发现他有两个属性 scrollerHeightwrapperHeightscrollerHeight >= wrapperHeight 时才能正常拉动,出现上述bug的原因时因为 图片没加载完成的情况下better-scroll已经初始化,这时会造成scrollerHeight < wrapperHeight 所以页面无法拉动

解决方案–图片预加载

通过预加载图片使其占好高度,防止高度塌陷,通过watch监听

  <template>
   <div v-show=show>
       <img src="xxxxx" alt="">
       <img src="xxxxx" alt="">
       <img src="xxxxx" alt="">
       <img src="xxxxx" alt="">
   </div>
</template>
<script>
    export default {
        mounted () {
            var _this = this
            let imgs = document.querySelectorAll('img')
            console.log(imgs)
            Array.from(imgs).forEach((item)=>{
                let img = new Image()
                img.onload = ()=>{
                    this.count++
                }
                img.src=item.getAttribute('src')
            })
        },
        data () {
            return {
                count : 0,
                show : false
            }
        },
        watch : {
            count (val,oldval) {
                if(val == 4){
                    this.show = true
                    alert("加载完毕")
                    //然后可以对后台发送一些ajax操作
                }
            }
        }
    }
</script>

尝试了一下也可以通过懒加载的方式解决