IntersectionObserver v2版本
业务需要内容展示后日志打点,于是使用到了IntersectionObserver,实践中发现一个问题:如果内容出现在了可视区内,但是被其他元素遮挡住了,这时候仍然会打日志。
于是寻找解决方案,发现IntersectionObserver 还有一个v2版本,刚好能解决这个问题。
在v2版本中,IntersectionObserverEntry对象数组的每一项都包含一个isVisible属性,该属性标识当前元素是否可见。当设置opacity, filter, transform或者被其他元素遮挡导致元素不可见时,该属性为false;
要开启该功能,需要在IntersectionObserver的配置参数中增加两个属性: trackVisibility delay
{
trackVisibility: true,
delay: 100, // 最小100
}
下面是一个示例代码:
<div id="root">
<p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>
</div>
<script>
// 观察根元素和被观察目标元素的交叉情况
const observer = new IntersectionObserver(
(entries, observer) => {
entries.forEach((entry) => {
if (entry.isVisible && entry.isIntersecting) {
entry.target.innerHTML = "loaded";
// observer.unobserve(entry.target); // 停止观察目标元素
} else {
entry.target.innerHTML = "unloaded";
}
});
},
{
// rootMargin 默认值为” 0px 0px 0px 0px “,可用百分比,相当扩展根元素的对应宽高的百分比的值;
// 可以是负值。正数的时候代表在回调会更早触发,为负值代表回调更晚触发。 为了避免出现空白,可以设置为正值
rootMargin: "-40px 0px -40px 0px ",
// root 被观察对象的祖先元素,也就是根元素;默认是浏览器的视口窗口
root: document.querySelector("#root"),
// threshold一个包含阈值的数组,比如,[0, 0.25, 0.5, 0.75, 1]就表示当目标元素 0%、25%、50%、75%、100% 可见时,会触发四次回调函数,
// 数组中的每个阈值可以是 0~1 之间的任意数值,默认值为[0],也就是开始进入,就会触发。
threshold: [1],
trackVisibility: true,
delay: 1000,
}
);
const pEl = document.querySelectorAll("p");
pEl.forEach((item) => observer.observe(item));
</script>
<style>
* {
margin: 0;
padding: 0;
}
div {
height: 400px;
overflow: auto;
box-shadow: 0 0 2px 0px rgba(255, 0, 0, 1);
margin-left: 10px;
}
p {
height: 50px;
width: 400px;
margin: 10px;
border: 1px solid darkseagreen;
/* opacity: 0.8; */
}
</style>
需要注意的是:该isVisible的判断比较保守,例如
filter: grayscale(0.01%)或opacity: 0.99设置也会isVisible为false。
IntersectionObserver v2版本的更多相关文章
- NetworkComms V2版本与V3版本语法的差异
NetworkComms网络通信框架序言 NetworkComms通信框架中V3版本是一次重要的升级,底层做了诸多改变,但语法上与V2版本相比,差不并不大. 监听端口: V3中 IPEndPoint ...
- AWS IoT Greengrass是什么?V1和V2版本及其差异
AWS IoT Greengrass Greengrass主要是用于边缘计算或者机器学习有关,对于详细了解请阅读结尾处的官方文档,文档内容也较为丰富. 目录 AWS IoT Greengrass ...
- 31.qt quick-使用SwipeView添加滑动视图-高仿微信V2版本
在上章我们学习了ListView,然后实现了: 28.qt quick-ListView高仿微信好友列表和聊天列表,本章我们来学习SwipeView滑动视图,并出高仿微信V2版本: 1.Contain ...
- kratos v2版本命令行工具使用
使用 下载 go install github.com/go-kratos/kratos/cmd/kratos/v2@latest 查看是否安装成功 kratos -v kratos version ...
- hl7中V2版本的ACK消息的构造
hl7 v2的ack消息即应答消息构造时有几个注意的地方. 首先,我们看下2个ack的例子: Send: MSH|^~\&|NIST_SENDER^^|NIST^^|NIST_RECEIVER ...
- 爱快路由计费系统easyradius隆重发布,支持V2版本,欢迎大家测试使用
随着PA.BV接口的发布的临近,我们已经对ROS及爱快V2接口进行大量的升级工作 经用户测试,各方便已满足用户需求. 其实很早以前我们就有支持爱快路由的打算,但是由于各方便原因,通讯接口做好了,但是并 ...
- 安装ionice v2版本(官方帮助文档)
安装最新的 ionic 命令行工具 npm install -g ionic@latest 官方文档:http://ionicframework.com/docs/v2/getting-started ...
- Ubuntu-通过v2版本的rancher安装部署k8s
环境: ubuntu:16.04+(64位) CPU:2C MEM:>4G docker:17.03.2 1.13.1 1.12.6 基础配置:(若是云服务器,下列只需要放行端口) >&g ...
- 【cocos2d-js官方文档】二十一、v3相对于v2版本的api变动
分类: cocos2d-js(28) 目录(?)[+] CCAudio.js SimpleAudioEngine.js改名为CCAudio.js. AudioEngine中删除了以下几个方法: pre ...
- PIX v2版本中Query 失败时, ERR段的构造
在ITI-9中描述PIX query事务的几个TestCase场景.其中有些是对于Query失败的描述. ERR 段包含Error location, Error code, Error code t ...
随机推荐
- 【Oracle】行转列的函数wm_concat,listagg,xmlagg,pivot以及动态行转列
[Oracle]行转列的几种情况 表的数据如下 朴实无华的函数 1.wm_concat 使用格式: select 分组字段,wm_concat(要转换的列名) from 表名 group by 分组字 ...
- iOS 循环引用的问题总结
原因: self -> Timer -> target(self), 造成循环引用 导致控制器不会销毁,不会调用dealloc 方法,内存泄漏 - (void)dealloc{ [_tim ...
- 快速实现 CDN 直播
功能简介 ZEGO Express SDK 支持推流到 CDN(Content Delivery Network,内容分发网络),包括转推 CDN 和直推 CDN 两种功能.开发者基于该功能可打通 R ...
- linux内核编译体验篇(一)
文章目录 一. 准备环境 二. 获取内核源码 三. 交叉编译工具链的配置 1. 博友们常用安装方法链接 2. 公司常用的交叉工具链使用方法 四. 内核解压以及如何打补丁 五. 内核基本配置 1. 编译 ...
- mysql:EXPLAIN
推荐阅读原文:EXPLAIN用法和结果分析 语法:EXPLAIN SELECT * FROM t1 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句 ...
- Linux 命令:btrfs filesystem resize
btrfs filesystem resize 2:300G /path ## 为创建了btrfs文件系统,已经挂载到/path 且device ID为2的硬盘/分区进行resize # 已经做过硬盘 ...
- Matlab机器人工具箱安装教程
参考以下博客 https://blog.csdn.net/AprilsHell/article/details/90722892
- Pandas 使用教程 CSV
CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本). CSV 是一种通用的.相对简单的文 ...
- 使用API调用获取商品数据的完整方案
在电子商务应用程序中,商品详情接口是不可或缺的一部分.它用于从电商平台或自己的数据库中获取商品数据,并将其提供给应用程序的其他部分使用.本文将详细介绍如何设计一个完整的商品详情接口方案,其中包括使 ...
- 【matplotlib基础】--绘图配置
Matplotlib 提供了大量配置参数,这些参数可以但不限于让我们从整体上调整通过 Matplotlib 绘制的图形样式,这里面的参数还有很多是功能性的,和其他工具结合时需要用的配置. 通过plt. ...