50强网站开发语言,网页设计大作业模板,专业seo优化费用,网上交易网IntersectionObserver API 是浏览器提供的一个用于异步观察目标元素与其祖先元素或视口#xff08;Viewport#xff09;交叉状态#xff08;即是否进入或离开视口#xff09;的接口。在 IntersectionObserver 出现之前#xff0c;开发者通常需要通过监听 scroll 事件或使用…IntersectionObserver API 是浏览器提供的一个用于异步观察目标元素与其祖先元素或视口Viewport交叉状态即是否进入或离开视口的接口。在 IntersectionObserver 出现之前开发者通常需要通过监听 scroll 事件或使用 getBoundingClientRect 方法来判断元素是否进入视口。
IntersectionObserver 的基本用法
(1) 创建观察器
通过 new IntersectionObserver() 创建一个观察器实例。
const observer new IntersectionObserver(callback, options); callback 当目标元素的交叉状态发生变化时触发的回调函数。 options 配置对象用于指定观察器的行为可选。
(2) 观察目标元素
通过 observer.observe() 开始观察目标元素。
const target document.querySelector(.target);
observer.observe(target);
(3) 停止观察
通过 observer.unobserve() 停止观察目标元素。
observer.unobserve(target);
IntersectionObserver 的回调函数
回调函数会在以下情况下触发 目标元素进入或离开视口。 目标元素的交叉比例intersection ratio发生变化。
回调函数接收两个参数 entries一个 IntersectionObserverEntry 对象的数组每个对象描述了一个目标元素的交叉状态。 observer观察器实例本身。 IntersectionObserverEntry 对象的属性 IntersectionObserver 的配置选项
options 是一个可选对象可以包含以下属性 const options {root: null, // 视口rootMargin: 0px, // 无边距threshold: [0, 0.5, 1], // 交叉比例为 0%、50%、100% 时触发回调
};const observer new IntersectionObserver(callback, options); 使用场景
(1) 图片懒加载
当图片进入视口时动态加载图片。
const images document.querySelectorAll(img[data-src]);const observer new IntersectionObserver((entries) {entries.forEach((entry) {if (entry.isIntersecting) {const img entry.target;img.src img.dataset.src; // 加载图片observer.unobserve(img); // 停止观察}});
});images.forEach((img) observer.observe(img));
(2) 无限滚动
当用户滚动到页面底部时加载更多内容。
const sentinel document.querySelector(#sentinel);const observer new IntersectionObserver((entries) {if (entries[0].isIntersecting) {loadMoreContent(); // 加载更多内容}
});observer.observe(sentinel);
(3) 广告曝光统计
当广告进入视口时记录曝光次数。
const ad document.querySelector(.ad);const observer new IntersectionObserver((entries) {if (entries[0].isIntersecting) {logAdImpression(); // 记录广告曝光observer.unobserve(ad); // 停止观察}
});observer.observe(ad);