我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue3组合式api实现v-lazy图片懒加载的方法实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue3组合式api实现v-lazy图片懒加载的方法实例

前置知识

Intersection Observer

浏览器提供api,用于检测目标元素和祖先元素/顶级文档视窗 (viewport) 交叉状态的方法。

    const observer = new IntersectionObserver(function (IntersectionObserverEntry) {},options);
    observer.observe(el);

构造函数接收一个回调函数,一个配置对象(可选),返回一个观察器实例。实例的observe方法接收一个dom节点作为观察的对象
当目标对象出现在视口的时候,会调用回调函数,传递一个元素都为IntersectionObserverEntry对象的数组。

IntersectionObserverEntry对象有以下属性 (只列举了这篇用到的两个):

  • target:被观察的目标元素,是一个 DOM 节点对象
  • intersectionRatio:目标元素的可见比例,即intersectionRect占boundingClientRect的比例,完全可见时为1,完全不可见时小于等于0

Vue3指令周期

  • created:在绑定元素的 attribute 或事件监听器被应用之前调用;
  • beforeMount:当指令第一次绑定到元素并且在挂载父组件之前调用;
  • mounted:在绑定元素的父组件被挂载后调用;
  • beforeUpdate:在更新包含组件的 VNode 之前调用;
  • updated:在包含组件的 VNode 及其子组件的 VNode 更新后调用;
  • beforeUnmount:在卸载绑定元素的父组件之前调用;
  • unmounted:当指令与元素解除绑定且父组件已卸载时,只调用一次;

image对象

Image 对象代表嵌入的图像。

  • onload 当图像装载完毕时调用的回调函数。

思路

想要的效果 在有多个图片加载的时候 只要在最外面的wrapper上用一次v-lazy就可以

每张图片的class="lazy" data-src先用加载gif替换掉,然后再放到文档碎片里面,等到用户滑动到视口了再挂载上图片元素,之前一直使用加载的gif占位,等图片加载完成再替换。

 首先vue3的指令跟组件类似也有生命周期,created的时候指令绑定的dom元素还没有attribute,也没有DOM结构,所以不适合,mounted整个DOM元素已经挂载到页面上了,图片在挂载上去的时候就开始加载,再做懒加载已经没有意义了,所以使用beforeMount,有完整的DOM结构,但是没有挂载到页面上。

完整代码

export const lazyLoad = {
  beforeMount(el: any, binding: any, vnode: any, prevVnode: any) {
    const img = el.querySelector(`.${el.className} img`);
    const class="lazy" data-src = img.getAttribute("class="lazy" data-src");
    // 图片使用loading gif替换
    img.setAttribute("class="lazy" data-src", "/file/upload/202211/13/qatfunmmvtg.jpg");
    // 新建Image对象
    const tempImg = new Image();
    tempImg.onload = function () {
      img.setAttribute("class="lazy" data-src", class="lazy" data-src);
    };
    const parent = img.parentNode;
    const observer = new IntersectionObserver(function (changes) {
      // 可视
      changes.forEach((item) => {
        if (item.intersectionRatio !== 0) {
          tempImg.class="lazy" data-src = class="lazy" data-src;
        }
      });
    });
    observer.observe(el);
  },
};

参考链接:

IntersectionObserver API 使用教程

总结

到此这篇关于vue3组合式api实现v-lazy图片懒加载的文章就介绍到这了,更多相关vue3实现v-lazy图片懒加载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue3组合式api实现v-lazy图片懒加载的方法实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue3 图片懒加载的两种方式、IntersectionObserver和useIntersectionObserver实例详解

这篇文章主要介绍了vue3 图片懒加载的两种方式、IntersectionObserver和useIntersectionObserver实例详解,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
2023-03-19

前端图片懒加载的原理与3种实现方式举例

图片懒加载又称图片延时加载、惰性加载,即在用户需要使用图片的时候加载,这样可以减少请求,节省带宽,提高页面加载速度,相对的,也能减少服务器压力,下面这篇文章主要给大家介绍了关于前端图片懒加载的原理与3种实现方式的相关资料,需要的朋友可以参考下
2023-03-01

web前端图片懒加载的原理与实现方式有哪些

这篇文章主要讲解了“web前端图片懒加载的原理与实现方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端图片懒加载的原理与实现方式有哪些”吧!一. 图片懒加载的目的大型网站如常
2023-07-05

CSS属性实现响应式图片延迟加载的方法

CSS属性实现响应式图片延迟加载的方法在网页开发中,经常会遇到需要加载大量图片的情况,特别是在移动设备上。为了提高页面的加载速度和用户体验,延迟加载(lazy loading)图像成为一种常见的优化方法。延迟加载是指在页面加载时,只加载可见
CSS属性实现响应式图片延迟加载的方法
2023-11-18

编程热搜

目录