商城首页欢迎来到中国正版软件门户

您的位置:首页 > 编程开发 >学习VUE3:利用Vue.js指令快速构建图片懒加载组件

学习VUE3:利用Vue.js指令快速构建图片懒加载组件

  发布于2024-11-11 阅读(0)

扫一扫,手机访问

Vue.js已经成为众多前端开发者和企业中流行的框架之一。而Vue3相较于Vue2来说,性能更优、占用更少的内存、更易于调试,吸引了越来越多的开发者的关注。在Vue3的学习过程中,熟悉指令的使用是非常重要的,本篇文章将指引你使用Vue.js指令封装一个图片懒加载组件。

什么是图片懒加载?

在网站或移动应用中,图片是占用页面资源最多的元素之一,图片过多或者过大都会影响页面的加载速度。而懒加载(Lazy Load)是一种图片优化技术,它可以推迟网页上某些图像的加载时间,没有出现在屏幕视窗内的图片不会被加载,只有当用户滚动到屏幕内时才开始下载。

动手实现图片懒加载

接下来,我们将使用Vue.js指令封装一个图片懒加载组件,首先,需要准备一个包含大量图片的网页:

<body>
  <ul>
    <li><img src="./img/img1.jpg"></li>
    <li><img src="./img/img2.jpg"></li>
    <li><img src="./img/img3.jpg"></li>
    <li><img src="./img/img4.jpg"></li>
    <li><img src="./img/img5.jpg"></li>
    <li><img src="./img/img6.jpg"></li>
    <li><img src="./img/img7.jpg"></li>
    <li><img src="./img/img8.jpg"></li>
    <li><img src="./img/img9.jpg"></li>
    <li><img src="./img/img10.jpg"></li>
  </ul>
</body>

现在,滚动页面时,所有的图片都会一次性加载完成。我们需要封装一个指令来实现图片的懒加载。

创建指令

使用createApp方法创建Vue实例后,我们可以添加自定义的指令。在本案例中,我们可以将v-lazy作为懒加载指令。

const app = Vue.createApp({
  // ...
})
app.directive('lazy', {
  mounted(el, binding) {
    //...
  }
})

el表示当前元素,binding包含指令名称、所在元素、所绑定数据等信息。

实现图片懒加载

我们可以通过创建一个IntersectionObserver实例来监听图片是否进入了可视区域:

const app = Vue.createApp({
  // ...
})
app.directive('lazy', {
  mounted(el, binding) {
    const observer = new IntersectionObserver((entries) => {
      if (entries[0].isIntersecting) {
        const img = new Image()
        img.src = binding.value
        img.addEventListener('load', () => {
          el.src = img.src
          observer.unobserve(el)
        })
      }
    })
    observer.observe(el)
  }
})

当图片进入可视区域时,实例化一个新的Image对象,预加载图片;当图片加载完成后,将图片链接赋值给原来的img标签,并停止观察该图片。

使用指令

在HTML代码中使用v-lazy来代替src来实现懒加载功能,其中v-lazy后面是需要进行加载的图片的路径。

<!DOCTYPE html>
<html>
<head>
  <!-- ... -->
</head>
<body>
  <ul>
    <li><img v-lazy="./img/img1.jpg"></li>
    <li><img v-lazy="./img/img2.jpg"></li>
    <li><img v-lazy="./img/img3.jpg"></li>
    <li><img v-lazy="./img/img4.jpg"></li>
    <li><img v-lazy="./img/img5.jpg"></li>
    <li><img v-lazy="./img/img6.jpg"></li>
    <li><img v-lazy="./img/img7.jpg"></li>
    <li><img v-lazy="./img/img8.jpg"></li>
    <li><img v-lazy="./img/img9.jpg"></li>
    <li><img v-lazy="./img/img10.jpg"></li>
  </ul>
</body>
</html>

现在,打开这个HTML页面,当我们滚动页面时,只有进入了可视区域的图片才会进行预加载和下载,达到了图片懒加载的效果。

总结

通过本篇文章,我们学习了如何使用Vue.js指令来封装一个图片懒加载组件,只有进入可视区域的图片才会进行加载和下载,避免了页面一过载就加载一大堆图片造成的卡顿问题。在实际的开发过程中,懒加载可以有效地提升用户访问体验,同时减少网页的加载时间,提高页面性能。

热门关注