Vue自定义指令directivs下定义的方法为何不执行

在监听自定义指令时触发scroll事件,进行图片懒加载,但是在首次进入此页面路由时,图片不展示,怀疑是lazyLoad()方法未执行,当滚动滑轮是图片展示,问题来了,我调用了lazyLoad()但是此事件就是不执行, 求助大佬这问题如何解决,vue萌新,想大佬递茶。

首次加载
图片描述

触发scroll事件
图片描述

代码如下:

``html
<template>
<div class="welfare" v-scroll>

<div class="welfare-item" :data-id="item._id" v-if="welfare" v-for="(item,index) in welfare" :key="index">
  <img  :alt="item.type" :arouth="item.who" :data-src="item.url">
</div>

</div>
</template>
``
``javascript
import axios from 'axios'
export default {

beforeCreate(){
  //准备创建Dom元素进行占为,展示Loading动画
  //this.$store.commit('updateLoadingMark',true);
},
data(){
  return {
    welfare: [],
  }
},
mounted(){
  //钩子  模板挂载对象已准备完毕Dom加载完成,等待数据填充
  let _self = this;
  axios.get('http://gank.io/api/random/data/福利/20')
  .then((response)=>{
    if(response.status == 200 && response.data.results){
      _self.welfare = response.data.results;
      //改变vuex 的loadingMark展示状态
      this.$store.commit('updateLoadingMark',false);
    }else{
      return console.log('axios请求已发送,返回数据失败');
    }
  })
  .catch((error)=>{
    return console.log(error);
  });
},
computed:{
},
directives:{
  //自定义指令
  scroll:{
    bind:((el,binding,vnode,oldVnode)=>{
      let _self = vnode.context;
      lazyLoad();
      window.addEventListener('scroll',lazyLoad);
      function lazyLoad(){
        let welfareClientHeight = document.documentElement.clientHeight;
        let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        let childrens = vnode.elm.childNodes;
        let n = 0;
        // 延时展示
        for(let i = n; i<childrens.length; i++){
          if(childrens[i].offsetTop < welfareClientHeight + scrollTop){
            // 当前的展示图片小于可视区域加上滚动条的高度
            let _selfImg = childrens[i].firstChild.getAttribute('data-src');
            if(_selfImg.length >= 0){
              childrens[i].firstChild.src = _selfImg;
            };
            n = i + 1;
          };
        };
      };
    }),
  }
},
methods:{
  //laztLoad 懒加载图片
  lazyload(){
    //123
  },
}

}
``

阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题