Vue自定义指令实现懒加载

Vue自定义指令注册(全局注册)

Vue.directive('自定义指令命名',{
   bind(){},
   inserted(){},
   update(){}, 
   componentUpdated(){},
   unbind()
})

第一个参数,为自定义指令的名称,不用带 v- 。第二个参数为一个对象,其中有5个钩子函数,类似于vue的生命周期钩子函数,它们也是被绑定元素各个周期会触发的钩子函数。

 每个执行时期如下:

bind():只调用一次,指令第一次绑定到HTML元素时调用。在这里可以进行一次性的初始化设置。
inserted():当指令绑定的元素插入到父节点中的时候触发。
update():当指令绑定的元素状态/样式、内容(这里指元素绑定的 vue 数据) 发生改变时触发。
componentUpdated():当 update() 执行完毕之后触发。
unbind():只调用一次,指令与元素解绑时调用。

 其中,每个钩子函数传入4个参数分别为:

el:指令所绑定的元素,可以用来直接操作 DOM。
binding:一个对象,包含以下 property:
    name:指令名,不包括 v- 前缀。
    value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
    oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
    arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。
    modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,
    修饰符对象为 { foo: true, bar: true }。
vnode:Vue 编译生成的虚拟节点。
oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

 一般来说,最常用的就是bind()和inserted()

了解完自定义指令的属性和方法,就可以实现图片的懒加载

首先介绍一个对象 IntersectionObserver ,它有如下属性

定义一个观察器,entries为状态改变元素的数组

 callback函数的参数(entries)是⼀个数组,每个成员都是⼀个IntersectionObserverEntry

            time:可见性发⽣变化的时间,是⼀个⾼精度时间戳,单位为毫秒

            target:被观察的⽬标元素,是⼀个 DOM 节点对象

            rootBounds:根元素的矩形区域的信息,

            getBoundingClientRect() ⽅法的返回值,如果没有根元素(即直接相对于视⼝滚动),则返回null

            boundingClientRect :⽬标元素的矩形区域的信息

            intersectionRect :⽬标元素与视⼝(或根元素)的交叉区域的信息

            intersectionRatio:⽬标元素的可见⽐例,即

            intersectionRect占 boundingClientRect的⽐例,完全可见时为1,完全不可见时⼩于等于0

你可能感兴趣的:(Vue,vue.js,javascript,前端)