首页 > 其他分享 >【js】元素是否在可视区范围内

【js】元素是否在可视区范围内

时间:2022-10-27 17:01:12浏览次数:45  
标签:body style const 元素 js backgroundColor 可视区 document

公式:元素到顶部距离(最近的具有定位父级元素)- 滚动条高度  <= 可视区的高度  

  • offsetTop、scrollTop

 

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .div {
            height: 2000px;
        }

        p {
            height: 200px;
            background: red;
        }
    </style>
</head>

<body>
    <div class="div"></div>

    <p id="p">我出现啦</p>

    <!-- 通过元素位置关系方法-->
    <script>
        function isContain(dom) {
            // 获取可视窗口的盖度。
            const screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
            // 获取滚动条滚动的高度
            const scrollTop = document.documentElement.scrollTop;
            // 获取元素偏移的高度。就是距离可视窗口的偏移量。
            const offsetTop = dom.offsetTop;
            return offsetTop - scrollTop <= screenHeight;
        }
        const p = document.getElementById("p");
        window.onscroll = () => {
            if (isContain(p)) {
                document.body.style.backgroundColor = 'blue'
            } else {
                document.body.style.backgroundColor = 'green'
            }
        }
    </script>

    <!-- 通过 getBoundingClientRect方法-->
    <!-- <script>
        // 只有当子元素全部出现在父元素中时,才会返回true。
        function isContain(dom) {
            const totalHeight = window.innerHeight || document.documentElement.clientHeight;
            const totalWidth = window.innerWidth || document.documentElement.clientWidth;
            // 当滚动条滚动时,top, left, bottom, right时刻会发生改变。
            const { top, right, bottom, left } = dom.getBoundingClientRect();
            console.log(top, right, bottom, left)
            return (top >= 0 && left >= 0 && right <= totalWidth && bottom <= totalHeight);
        }

        const p = document.getElementById("p");
        window.onscroll = () => {
            if (isContain(p)) {
                document.body.style.backgroundColor = 'blue'
            } else {
                document.body.style.backgroundColor = 'green'
            }
        }
    </script> -->

    <!-- 通过new IntersectionObserver();  -->
    <!-- <script>
        const observer = new IntersectionObserver((entries) => {
            if (entries[0].isIntersecting) {
                document.body.style.backgroundColor = "blue"
            } else {
                document.body.style.backgroundColor = "green"
            }
        }, { threshold: .2 });
        const p = document.getElementById("p")
        observer.observe(p)
    </script> -->
</body>

</html>

 

 

搜索

复制

<iframe></iframe>

标签:body,style,const,元素,js,backgroundColor,可视区,document
From: https://www.cnblogs.com/websmile/p/16832863.html

相关文章

  • 使用伪元素 before 叹号
    .tip {  width: 400px;  line-height: 150%;  border-left-color: #f66;  color: #666;  padding: 12px 24px 12px 30px;  margin: 2em 1em......
  • 元素等待
    概念显示等待是针对某一个元素进行相关等待判定;隐式等待不针对某一个元素进行等待,全局元素等待。a.相关模块WebDriverWait#显示等待针对元素必用expected_conditio......
  • LeetCode_LinkedList_82. Remove Duplicates from Sorted List II 删除排序链表中的重
    目录​​一,题目描述​​​​英文描述​​​​中文描述​​​​二,解题思路​​​​三,AC代码​​​​C++​​​​四,解题过程​​​​第一博​​一,题目描述英文描述Giventheh......
  • nodejs实现jwt
    jwt是jsonwebtoken的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token1.为什么需要会话管理我们用nodejs为前端或者其他服务提供......
  • js
    JavaScript:运行在客户端的脚本语言,不需要预编译,运行过程中由js引擎逐行进行解释并执行,现在可以基于node.js技术进行服务器端编程  用于实现逻辑和页面控制   ......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • js实现字符串数组转换成数字数组的几种方式
      参考:https://blog.csdn.net/sumimg/article/details/114314438......
  • Python之JSON用法解析
    前景Python编写HDFS服务安装的过程中,需要将构建好的JSON对象输出到文件,采用那种方式更便捷方案1open函数defwriteExecCmdCheckActionsFile(self,out_res,che......
  • 【js】json的相关操作
    1、将json数据和数组融合demo<script>varjson={all:10,un:3,comp:2,inc:5}......
  • leetcode 234. 回文链表 js 实现
    给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。 示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出......