vue项目js原生属性IntersectionObserver实现图片懒加载
IntersectionObserver
使用js原生属性IntersectionObserver实现观察img元素是否处于游览器视口中
懒加载原理:给img设置一个默认url图片,观察图片处于视口内以后,动态改变img的url为自己想要显示的url
先上效果图:
新建js文件:lazyLoad.js
const ob = new IntersectionObserver((entries) => {for (const entry of entries) {if (entry.isIntersecting) {const img = entry.target;img.src = img.dataset.src;console.log('block', img.style.display);ob.unobserve(img);}}
},
{threshold: 0,
});function lazyLoadImages() { const imgs = document.querySelectorAll("img[data-src]"); imgs.forEach((img) => {ob.observe(img); });
} // 初始加载时执行一次
lazyLoadImages(); // 添加新图片时再次执行
document.addEventListener('DOMNodeInserted', lazyLoadImages);
html代码
<img src="@/static/image/default.jpg":data-src="item.url"id="obimg"style="width: 100%;height: 100%;":class="{ 'view': item.view }"@click="imgClick(item)">
js中引入
import '@/utils/lazyLoad.js';