图片懒加载指令

场景和指令用法:

电商网站的首页通常会很长,用户不一定能访问到页面靠下面的图片,这类图片通过懒加载优化手段可以做到只有进入视口区域才发送图片请求

 

 在vue官网中查看的

将一个自定义指令全局注册到应用层级(常见的做法):

const app = createApp({})

//使v-focus在所有组件中都可用
app.directive('focus',{
   /*...*/
})

 只有当所需功能只能通过直接的 DOM 操作来实现时,才应该使用自定义指令。其他情况下应该尽可能地使用 v-bind 这样的内置指令来声明式地使用模板,这样更高效,也对服务端渲染更友好。

 isIntersecting:判断当前图片是否进入可视区域

 

 

 

 

 

图片懒加载指令的封装详情如下: 首先,在需要懒加载的DOM元素上,使用自定义指令v-自定义指令名,并在该指令绑定的元素中设置图片路径。例如: ``` <RouterLink to="/" class="image"> <img alt="" v-自定义指令名="图片路径" /> </RouterLink> ``` 其次,需要封装一个指令函数,用于实现图片的懒加载。该函数可以导入默认显示的图片,并通过指令名称注册到Vue的应用程序中。例如: ```javascript // 导入默认显示的图片 import defaultImg from '@/assets/images/200.png' // 指令 const defineDirective = (app) => { // 图片懒加载指令 app.directive('自定义指令名', { mounted (el, binding) { const observer = new IntersectionObserver(([{ isIntersecting }]) => { // 判断图片是否在可视范围内 if (isIntersecting) { // 在可视范围内即可取消监听 observer.unobserve(el) // 如果图片加载失败,则显示默认图片,onerror错误事件 el.onerror = () => { el.src = defaultImg } // 图片懒加载的核心原理 --- 图片在可视区域内即将图片路径赋值为自定义指令绑定的值,这个时候才让图片加载 el.src = binding.value } }, { // 设置监控距离为图片和可视区域交叉距离为0.01时加载图片 threshold: 0.01 }) // 监听绑定的DOM元素 observer.observe(el) } }) } ``` 然后,在全局插件注册的index.js文件中,将该指令函数注册到Vue的应用程序中。例如: ```javascript export default { install (app) { // 省略其他... defineDirective(app) } } ``` 这样,图片懒加载指令就封装完毕了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值