IntersectionObserver

LazyLoad

(function lazyLoad() {
	const imageToLazy = document.querySelectorAll("img[data-src]");
 
	const loadImage = function (image) {
		image.setAttribute("src", image.getAttribute("data-src"));
 
		image.addEventListener("load", function () {
			image.removeAttribute("data-src");
		});
	};
 
	const intersectionObserver = new IntersectionObserver(function (
		items,
		observer
	) {
		console.log(items);
 
		items.forEach(function (item) {
			if (item.isIntersecting) {
				loadImage(item.target);
 
				observer.unobserve(item.target);
			}
		});
	});
 
	imageToLazy.forEach(function (image) {
		intersectionObserver.observe(image);
	});
})();

参考阅读