解决better-scroll中图片上拉拉不动的问题

 一.原因

Better-Scroll内部加载图片机制:

  •   Better-Scroll在决定有多少区域可以滚动时,是根据scrollerHeight属性决定      

        。scrollerHeight属性根据放Better-Scroll的content的子组件的高度

        。但在首页中,刚开始在计算scrollerHeight属性时,没有将图片计算在内,

        。 所以计算出来的高度是错误的,当图片加载进来后有了新的高度,但是scrollerHeigh属性并没有进行更新,这样滚动就会出现问题。

 二.解决方法

  • 监听每一张图片是否加载完成,只要有一张图片加载完成了,就执行一次scroll的refresh()

三.步骤

  1. 在展示数据的listItems页面中,给img添加原生js监听
    //html代码
    <img :src="goodItem.img" alt="" @load="isLoadOk">
    
    
    
  2.  当图片加载后,给父组件发射事件
     methods: {
              isLoadOk() {
                this.$bus.$emit('imageLoad');
              }
            }
  3.  在这里,listItem跟home并不是父子组件间的通信,因此在这里要选择事件总线
    //main.js中生成一个Vue
    
    //创建一个Vue生成事件总线
    Vue.prototype.$bus = new Vue()
  4.  如果图片数据非常多,为了防止refresh非常频繁的问题,需要进行防抖操作

 

<template>
    <scroll class="content"  ref="scroller"> </scroll>
</template>

<script>
//此段代码写在home.vue中
methods: {
//防抖动函数
debounce(func,delay) {
  let timer = null;
  return function (...args) {
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
      func.apply(this,args)
     },delay)
    }
  }
},
mounted() {
    const refresh = this.debounce(this.$refs.scroller.srcRefresh,200)
    this.$bus.$on("imageLoad", () => {
      refresh()
    });
  }  

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值