首页 > 其他分享 >js 浏览器的5种observer 第二种 IntersectionObserver 详解及使用方法

js 浏览器的5种observer 第二种 IntersectionObserver 详解及使用方法

时间:2023-09-12 18:44:04浏览次数:36  
标签:const observer img js entry IntersectionObserver 浏览器

 

IntersectionObserver 是一个现代的浏览器 API,允许开发者在某个元素与其祖先元素或顶层文档视口发生交叉时得到通知。它非常适合实现图片懒加载、无限滚动、广告曝光率等功能。

1. 浏览器的兼容性

IntersectionObserver 目前在大多数现代浏览器中都得到了支持。但是在一些老版本的浏览器,如 IE 中,则没有支持。
点击查看 IntersectionObserver 的兼容性

2. 如何使用?

// 创建一个观察者实例
const observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
        // entry.isIntersecting 判断目标元素是否在视口中
        if (entry.isIntersecting) {
            console.log('目标元素在视口中!');
        } else {
            console.log('目标元素不在视口中.');
        }
    });
});
// 开始观察某个元素
const targetElement = document.querySelector('.some-class');
observer.observe(targetElement);

// 停止观察
// 如果你不再需要观察某个元素,你可以调用:
observer.unobserve(targetElement);
// 如果你想停止观察所有元素,你可以调用:
observer.disconnect();

// 配置选项
当创建 IntersectionObserver 实例时,你可以提供一个配置对象,该对象有以下属性:
const options = {
    root: document.querySelector('.scroll-container'), // 观察目标的父元素,如果不设置,默认为浏览器视口
    rootMargin: '10px', // 增加或减少观察目标的可见区域大小
    threshold: [0, 0.25, 0.5, 0.75, 1] // 当观察目标的可见比例达到这些阈值时会触发回调函数
};
const observer = new IntersectionObserver(callback, options);

3. 一些常见的应用场景

// 图片懒加载
const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            const img = entry.target;
            img.src = img.dataset.lazy;
            observer.unobserve(img);
        }
    });
});
document.querySelectorAll('img[data-lazy]').forEach(img => {
    observer.observe(img);
});

// 无线滚动加载
const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            loadMoreContent(); // 你的加载更多内容的函数
            observer.unobserve(entry.target); // 如果你只想加载一次,你可以在这里停止观察
        }
    });
});
const loadMoreTrigger = document.querySelector('.load-more-trigger');
observer.observe(loadMoreTrigger);

标签:const,observer,img,js,entry,IntersectionObserver,浏览器
From: https://www.cnblogs.com/anans/p/17697522.html

相关文章

  • React框架下如何集成H.265网页流媒体EasyPlayer.js视频播放器?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的视频流。在功能上,EasyPlayer支持直播、点播、录像、快照截图、MP4播放......
  • python中JSON数据处理
    python和json数据类型对应关系PythonJSONdictionaryobjectlistarraystringstringint,floatnumberboolean(True,False)boolean(true,false)Nonenull需要注意的是,Python支持一些JSON不支持的数据类型,如元组(tuple)、集合(set)和字节串(bytes)。因此,在......
  • RTMP视频服务器EasyDSS互联网视频直播点播平台如何基于FastDFS、ffmpeg、videojs实现
    互联网视频直播点播EasyDSS平台能实现视频流媒体的上传、转码、存储、录像、推流、拉流、直播等功能,在场景上,可以应用到互联网教育、在线课堂、游戏直播、视频点播、无人机等领域。 视频点播平台是指提供用户上传、存储和播放视频内容的在线平台。它可以让用户随时随地观看各......
  • [RxJS] Scheduler
    classObservable{constructor(subscribe){this._subscribe=subscribe;}subscribe(observer){returnthis._subscribe(observer);}staticof(value){returnnewObservable((observer)=>{observer.next(value);obse......
  • Python3 JSON 数据解析
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。Python3中可以使用json模块来对JSON数据进行编解码,它包含了两个函数:json.dumps(): 对数据进行编码。json.loads(): 对数据进行解码。在json的编解码过程中,Python的原始类型与json类型会相互转......
  • js&jquery(写法对比):get input value(获取input值)
    1.JS写法 2.jquery写法 ......
  • JS小方法,一行搞定
    1.数组去重从数组中删除所有重复值,实现方式非常多,我们这里一行代码搞定:constduplicate=(arr)=>[...newSet(arr)];console.log(duplicate(["a","b","c","c","a","b"]));//['a','b','b']2.检查对象是否为......
  • wkt转换成geojson的代码
    安装及导入(在安装shapely之前一定要先安装geos)pipinstallgeospipinstallshapely下面是一个使用Python将WKT转换为GeoJSON的代码示例:importjsonfromshapely.wktimportloadswkt="POINT(1010)"shape=loads(wkt)geojson=json.dumps(shape.__geo_inter......
  • Android项目之JSON解析(3种解析技术详解)
    一、用Android原生技术解析JSON:特点:很麻烦,对于复杂的json数据解析很容易出错!(不推荐使用)1、解析JSON对象的API:JsonObjectJSONObject(String json);将Json字符串解析成Json对象;XxxgetXxx(Stringname);根据name在json对象中得到相应的value。示例代码:(1)获取或创建JSON数据(为了方便,这里......
  • 上位机使用JS SerialPort进行串口通信, 包含开发环境搭建和完整示例代码
    在嵌入式开发中,我们经常需要使用上位机(PC)与一些电路模块进行通信,用于获取一些传感器的数据,或者发送命令控制相应的电路模块。NodeJS目前支持使用SerialPort模块进行串口通信,本文主要介绍如何搭建测试开发环境和如何使用SerialPort进行串口通信。 开发前准备:1.下载安装NodeJS......