检查元素是否在屏幕上可见
Check if an element is visible on screen
我使用这个插件-isOnScreen来检查元素在视口中是否可见(检查帖子是否已被查看)。
但是,是否可以有某种类型的回调,以便在各个元素可见时激发回调,而不是每次都有setTimeOut并检查每个帖子的可见性?
或者我还有其他图书馆可以用来做这件事吗?
我说的是视觉视口。(非css可见性)
下面是一个脚本,它使用新的IntersectionObserver
API返回一个promise,用于检查元素在视口中是否可见:
function isVisible(domElement) {
return new Promise(resolve => {
const o = new IntersectionObserver(([entry]) => {
resolve(entry.intersectionRatio === 1);
o.disconnect();
});
o.observe(domElement);
});
}
你可以在你的代码中使用:
const visible = await isVisible(document.querySelector('#myElement'));
console.log(visible);
在滚动过程中,主要有两种方法可以检查元素是否在屏幕上可见/隐藏:
- 正在收听窗口滚动事件
- 使用交叉点观察员API观察元素的可见性
滚动事件有很多性能问题。
新方法是使用交叉点观察员API交叉点观察者API可以知道元素何时进入或退出浏览器视口。此API是异步
var observer = new IntersectionObserver(function(entries) {
if(entries[0].isIntersecting === true)
console.log('Element is fully visible in screen');
}, { threshold: [1] });
observer.observe(document.querySelector("#element"));
阈值是一个介于0和1之间的数字,表示屏幕中目标元素的可视区域。例如,0表示元素的任何区域都不可见。0.10的值表示在屏幕中可以看到大约10%的区域。值为1表示元素在屏幕中完全可见。
我最近开发了一个名为viewport action的小型库,用于检查元素何时在视口中。它对像你这样的案子可能很方便。
感受细节:
- 您可以一次或每次调用回调
- 您可以通过检查某个高度、宽度或面积何时显示来检查元素的显示量
- 它等待浏览器中的
DOMContentLoaded
事件或Cordova应用程序中的deviceready
事件,然后开始检查元素(如果是Cordova的应用程序) - 它还不依赖于
Promise
来支持没有它和旧浏览器的应用程序
请参阅下面的示例,在该示例中,它检查元素中有多少是基于百分比显示的。
var options = {
once: true
};
viewportAction.add('#check', function (e) {
var percentageShown = (e.detail.availableArea / (e.detail.width * e.detail.height)) * 100;
// Load an image inside the element when the area visible is bigger
// than 60% of its area.
if (percentageShown > 60) {
e.target.innerText = 'Showing ' + percentageShown.toFixed(0) + '% of the element';
// Remove handler if you don't want to use options
// e.removeHandler();
} else {
e.target.innerText = 'Showing less than 60%';
}
// Use options, optionally
//}, options);
});
#check {
background-color: #F00;
color: #FFF;
height:500px;
width; 100%;
}
.spacer {
background-color: #CCC;
height: 300px;
}
<script src="https://cdn.jsdelivr.net/npm/viewport-action@0.2.0/dist/viewportAction.min.js"></script>
<div class="spacer">Scroll down or up</div>
<div id="check"></div>
<div class="spacer"></div>
相关文章:
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- 当元素到达屏幕上的某个位置时触发事件
- Javascript元素相对于屏幕的位置
- 当元素在屏幕中占60%时,WOW.js启动动画
- 如何显示显示的html元素:在特定的媒体屏幕上没有
- 如何根据客户端的屏幕大小使用javascript更改DOM元素
- 获取以屏幕像素为单位的旋转SVG元素的边界
- 如何在html和javascript中捕捉聚合物元素的屏幕截图
- 在不使用 CSS 的情况下,将元素与浏览器屏幕顶部保持设定的距离
- D3 - 如何确定元素何时离开屏幕
- Javascript,检查元素是否已离开屏幕
- Css-是否可以在调整屏幕大小时使元素移动,以使其适合屏幕
- 迭代JSON对象并将元素打印到屏幕上的最佳方式是什么
- 拍摄元素的屏幕截图
- 使元素显示在最小屏幕大小上
- 浏览器是否对屏幕元素执行相应的Javascript选择
- 如何在屏幕外预加载图像,然后移动到不同的屏幕元素
- 可以禁用finuploader,但仍然渲染屏幕元素
- 用于将HTML屏幕元素绑定到Javascript结构的框架/库