| Vue 自定义指令

介绍

官网:https://cn.vuejs.org/v2/guide/custom-directive.html

学习

全局指令定义:

image.png

知识点

  • 5 个钩子函数,4 个钩子函数参数
  • 动态指令参数
  • 简写
  • 字面量

练习

<template>
  <div id="app">
    <ul>
      <li v-for="(item, index) in list" :key="index">{{item}}</li>
    </ul>
    <h2 v-scroll>onScroll</h2>
  </div>
</template>

<script>
import Vue from 'vue';

let list = [];
let i = 100;
while(i > 0){
  list.push(i);
  i--;
}

Vue.directive('scroll', {
  // 钩子函数
  inserted(el, binding, vnode){
    // 虚拟节点
    console.log(vnode);
    window.addEventListener('scroll', vnode.context.onScroll);
  }
});

export default {
  name: 'app',
  data () {
    return {
      list: list,
      num: 1000
    }
  },
  methods:{
    onScroll(){
      let scrollTop = document.documentElement.scrollTop || window.scrollY || window.pageYOffset ;
      let innerHeight = window.innerHeight;
      let scrollHeight = document.documentElement.scrollHeight;

      console.log(scrollTop, innerHeight, scrollHeight, scrollHeight - scrollTop - innerHeight);
      // 倒数1000距离范围内,每200距离打印一次距底距离
      if(scrollHeight - scrollTop - innerHeight == this.num){
        console.log(`见底距离:${scrollHeight - scrollTop - innerHeight}`);
        this.num -= 200;
        if(this.num == -200){
          this.num += 1200;
        }
      }
    }
  }
}
</script>

<style>
</style>
  • 效果
演示.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容