【javascript】判断元素是否在可视区域内

  1. 根据元素到窗口顶部距离判断
  • el.offsetTop - scrollTop <= windowHeight
function isInViewPortOfOne (el) {// viewPortHeight 兼容所有浏览器写法const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight const offsetTop = el.offsetTopconst scrollTop = document.documentElement.scrollTopconst top = offsetTop - scrollTopreturn top <= viewPortHeight
}

补充:小程序提供异步获取元素offsetTop、scrollTop、windowHeight的方法

export const getDom = function (id, obj) {const query = uni.createSelectorQuery().in(obj);return new Promise(resolve => {return query.select(id).boundingClientRect().exec(res => {resolve(res[0])});})
}export const isInViewport = function (element) {// 注意:element必须是小程序元素,组件库里不行// 获取节点位置信息const top = element.top;const bottom = element.bottom;// 获取可视区域的高度const windowHeight = uni.getSystemInfoSync().windowHeight;return new Promise((resolve) => {// 获取页面滚动的位置uni.createSelectorQuery().selectViewport().scrollOffset(scroll => {const scrollTop = scroll.scrollTop;// 判断节点是否在可视区域内if (bottom > 0 && top - scrollTop < windowHeight) {// 节点在可视区域内resolve(true);} else {// 节点不在可视区域内resolve(false);}}).exec();})
}
let viewList = [];
for (let index = 0; index < this.List?.length; index++) {const item = this.List[index];const dom = await getDom(`#test${index}`, this);if (dom) {const r = await isInViewport(dom);if (r) viewList.push(item.auctionId)}
}
console.log('可视区域列表', viewList);
  • getBoundingClientRect直接获取元素相对视口的位置(top,left,bottom,left)
function isInViewPort(element) {const viewWidth = window.innerWidth || document.documentElement.clientWidth;const viewHeight = window.innerHeight || document.documentElement.clientHeight;const {top,right,bottom,left,} = element.getBoundingClientRect();return (top >= 0 &&left >= 0 &&right <= viewWidth &&bottom <= viewHeight);
}
  1. 判断元素是否和视口交叉或进入IntersectionObserver
  • 创建观察者
const options = {threshold: 1.0, //阈值观察范围0-1,0未进入,1完全进入root:document.querySelector('body') // 必须是目标元素的父级元素
};const callback = function(entries, observer) { 
//这里满足(threshold为1)完全进入目标视口的执行以下内容entries.forEach(entry => {entry.time;               // 触发的时间entry.rootBounds;         // 根元素的位置矩形,这种情况下为视窗位置entry.boundingClientRect; // 被观察者的位置举行entry.intersectionRect;   // 重叠区域的位置矩形entry.intersectionRatio;  // 重叠区域占被观察者面积的比例(被观察者不是矩形时也按照矩形计算)entry.target;             // 被观察者});
};const observer = new IntersectionObserver(callback, options);//满足options就会执行callback
  • 传入观察者开始监听
const target = document.querySelector('.target');
observer.observe(target);

学习参考:
如何判断一个元素是否在可视区域中?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言输出重定向

#include <windows.h> #include <stdio.h> // 定义一个回调函数&#xff0c;用于处理输出的文本 BOOL WINAPI ConsoleOutputCallback( _In_ char const* lpOutput, _In_ DWORD nNumberOfCharsToWrite, _Out_ LPDWORD lpNumberOfCharsWritten, _I…

【ElementUI -- 优化小技巧系列】 -- el-tree 节点内容过长优化 以及选中默认节点

在使用elementui过程中经常碰到关于样式的问题&#xff0c;我曾经很喜欢通过类名修改css样式来做&#xff0c;其实原生封装的elementui库的样式对于普通开发来说已经足够了&#xff0c;通过类名修改css只会让组件臃肿难以维护&#xff0c;现在真的越来越怕写css&#xff0c;经常…

限流算法学习

文章目录 限流算法基本介绍适用场景计数器算法滑动窗口算法令牌桶算法漏桶算法综合比较 示例实现 限流算法 限流算法是在系统设计中常用来控制资源访问速率、防止服务过载的技术手段。 基本介绍 主要的限流算法有以下几种&#xff1a; 计数器算法 计数器算法是最简单的限流…

Python语言参考手册 1. 概论

Python语言的精确描述 本专栏致力于提供Python语言的精确描述&#xff0c;包括其语法&#xff08;Syntax&#xff09;、语义&#xff08;Semantics&#xff09;和标准库的详细信息。语法是指编程语言中代码的结构规则&#xff0c;而语义则是指代码的含义&#xff0c;涉及代码如…

解决html2canvas生成图片慢的问题

// 主要看那个点击事件就行 <divclass"textBox-right-board-group"v-for"item in screenList":key"item.id"><!-- 获取不同分辨率下的屏幕的展示的文字大小DPI&#xff1a; fontSize: getFontSize(item.resolutionRatio), --><di…

windows安装 nvm,实现nodejs多版本切换

下载链接&#xff1a;https://github.com/coreybutler/nvm-windows/releases 安装node指定版本 nvm install 版本号 列出所有node版本 nvm ls 切换node版本 nvm use 版本号

AI智能化逐渐趋于成熟后,预测今后最吃香的开发职业

AI智能化正在成熟的路途中&#xff0c;这中间会有波折&#xff0c;但终有一天会来的&#xff0c;我相信等到了这一天&#xff0c;我们的开发效率和代码质量&#xff0c;将会大大不同&#xff0c;而我们的团队与个人&#xff0c;也会面临着很棒的体验。 那么在AI智能化真正趋于成…

前端开发攻略---使用Sass调整颜色亮度,实现Element组件库同款按钮

目录 1、演示 2、实现原理 3、实现代码 1、演示 2、实现原理 改变颜色亮度的原理是通过调整颜色的 RGB 值中的亮度部分来实现的。在 Sass 中&#xff0c;可以使用颜色函数来操作颜色的 RGB 值&#xff0c;从而实现亮度的调整。 具体来说&#xff0c;亮度调整函数通常会改变颜…

武汉星起航:展望跨境电商新篇章,创新发展助力品牌国际化

随着全球经济一体化的深入发展&#xff0c;跨境电商行业正迎来前所未有的发展机遇。在这个充满机遇的时代&#xff0c;武汉星起航电子商务有限公司以其独特的自营亚马逊跨境电商模式和卖家孵化服务&#xff0c;成为了行业内的一股强劲力量。展望未来&#xff0c;武汉星起航将继…

VLM与基础分割模型的联合使用

最近做的项目里有涉及大模型&#xff0c;里面有一部分的功能是&#xff1a; 将图片输入VLM(视觉语言模型&#xff0c;我使用的是llava)&#xff0c;询问图中最显著的物体&#xff0c;将其给出的答案作为基础分割模型&#xff08;我使用的是Grounded-SAM&#xff09;的text prom…

云原生测试实战-云计算大数据云原生架构容器技术Kubernetes计算机软件工程软件开发

系列文章目录 送书第一期 《用户画像&#xff1a;平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …

Gradle报错Cause: zip END header not found,构建问题解决

问题描述 构建报错&#xff1a;Cause: zip END header not found 解决办法 File>>setting>>Build,Execution,Deployment>>Gradle 选择你本地的Gradke路径 问题解决

2024年数维杯数学建模C题思路

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

拼多多投产比怎么逐步调高

提高拼多多的投产比&#xff08;ROI&#xff09;需要综合考虑多个因素&#xff0c;包括点击量、转化率、客单价以及点击花费。以下是一些有效的方法&#xff1a; 拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自…

8-3 html中的表单标签 select和textarea

跟学b站黑马程序员pink老师&#xff0c;之前发过长篇&#xff0c;太长不好阅读&#xff0c;拆分成短篇 8.4.3 select下拉表单元素 如果在页面中有多个选项让用户选择&#xff0c;并且想要节约页面空间&#xff0c;我们可以用<select>标签来定义下拉列表 1.<select&g…

MySQL监控与诊断:从SHOW命令到第三方监控工具

MySQL作为最流行的关系型数据库管理系统之一&#xff0c;其性能和稳定性对于许多应用来说至关重要。为了确保MySQL数据库能够持续、高效地运行&#xff0c;我们需要进行监控和诊断。本文将从MySQL的内置工具&#xff08;如SHOW命令和INFORMATION_SCHEMA&#xff09;出发&#x…

图片批量处理:批量调整图片色调,简单方法与高级技巧

随着数字摄影和社交媒体的普及&#xff0c;我们每天都接触到大量的图片。为了提升图片的观感和视觉效果&#xff0c;对图片进行色调调整变得至关重要。而对于那些需要处理大量图片的用户来说&#xff0c;批量调整图片色调则是一个能够大大提高工作效率的功能。本文将介绍办公提…

layui 数据表格 自动定位新增行位置

由于数据表格新增行后没有到新增到当前位置 继续增加的需求&#xff1a; 因为自己是新增行后到最后一行的 所以 就定位到最后一行 并且 高亮 高亮颜色浅 可自行更改 整理了一下 可根据 情况 修改 // 初始化滚动条位置变量 let tableScroll {scrollTob: 0,scrollLeft: 0,…

【Node.js工程师养成计划】之使用Node连接MongoDB进行增删改查

一、Node连接MongoDB mongodb npm install mongodb # or ... yarn add mongodbdemo: const { MongoClient } require(mongodb); // or as an es module: // import { MongoClient } from mongodb// Connection URL const url mongodb://localhost:27017; const client ne…

大语言模型用到的代码库资源

文章目录 Hugging Face 开源社区DeepSpeedMegatron-LM Hugging Face 开源社区 Hugging Face 是一个致力于推动自然语言处理技术进步的开源社区&#xff0c;专注于为研究人员和工程师提供高效、易用且可重复的自然语言处理技术解决方案。这些解决方案既包括基础的技术流程&#…