zoukankan      html  css  js  c++  java
  • 解决首页中Better-scroll可滚动区域的问题

    在首页时候,使用BetterScroll插件的时候,滚动的时候经常会卡顿。Better-scroll在决定有多少区域可以滚动时,是根据ScrollerHeight属性决定的。ScrollerHeight属性时根据Better-Scroll的content中的子组件的高度。但是,刚开始在计算scrollerHeight属性时,是没有将图片计算在内的。所以计算出来的高度是错误的,后来图片加载进来的时候,即使出现了新的高度,但是ScrollerHeight属性并没有进行更新,才会滚动出现问题。

    解决这个问题的话,我们只需要监听每一张图片是否加载完成,只要有一张图片加载完成了,就执行一次refresh()。来稍微解释下refresh函数,其作用为,重新计算 better-scroll,当 DOM 结构发生变化的时候务必要调用确保滚动的效果正常。监听图片的加载完成的话,只需要在goodsitem中的img中,使用@load进行监听。而goodsitem与home并不属于父子组件关系。而如果在这里使用,vuex,又感觉过于杂糅,因此在这里使用了事件总线。

    首先,先记录下Vue事件总线的使用方法,现在main.js中创建$bus,这样即可全局使用,那么我们在main.js中首先加入,如下一行代码:

    Vue.prototype.$bus= new Vue()

    之后,在需要传出的goodsitem中,对其img进行监听,且使用事件总线传出:

    <template>
    <div class="goodsitem">
      <img :src="goodsitem.show.img" @load="imageload">
    </div>
    </template>
    
    <script>
    export default {
    name: "goodsitem",
    methods:{
      imageload(){
        this.$bus.$emit("itemimageload")
      }
    }
    }
    </script>

    之后,在home.vue中添加如下代码:

    mounted() {
        //3.监听item中图片加载完成
        this.$bus.$on("itemimageload",()=>{
          console.log("-----");
    this.$refs.scroll.refresh() }) }

    再在scroll.vue中的methods里面如下处理即可:

    methods:{
        refresh(){
          // console.log("----1----");
          this.scroll.refresh()
        }
      }
  • 相关阅读:
    葡萄庄园 [图论]
    硬币游戏 [博弈论, 思维题]
    烹饪 [容斥]
    BZOJ1597 [Usaco2008 Mar]土地购买 [斜率优化]
    TCP IP协议
    soap协议
    xml的语法规则
    fiddler的使用
    常见默认端口
    智能休眠时间的使用
  • 原文地址:https://www.cnblogs.com/ljylearnsmore/p/14194176.html
Copyright © 2011-2022 走看看