最近写移动端的项目,需要用到图片懒加载的功能。试用了一下组件库 Mint-UI 的v-lazy
指令,发现有一些 bug,于是自己手写了一个。到目前为止都使用良好。
用到的钩子函数
bind
:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
update
:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。
用到的钩子函数参数
el
:指令所绑定的元素,可以用来直接操作 DOM 。binding
:一个对象,包含以下属性:name
:指令名,不包括v-
前缀。value
:指令的绑定值,例如:v-my-directive="1 + 1"
中,绑定值为2
。- 其他属性省略
代码
1 | // 注册一个全局自定义指令 `v-lazy`用于图片懒加载 |
这是一种简写的方式,会将这个函数同时绑定在bind
和update
上。
使用
1 | <img alt class="cover-img" v-lazy="item"> |
参数说明
v-lazy='item'
:item
是要加载的图片的 src
如果要设置图片加载时的样式,使用属性选择器img[lazy=loading]
即可。如下:
1 | img[lazy='loading'] { |