如何判断元素是否在当前文档显示区内?

首先了解一下背景知识

scrollTop

  • scrollTop,scrollLeft 元素滚动的位移
  • 一般获取页面滚动距离用 document.body.scrollTop

 

offsetTop

  • offsetTop,offsetLeft元素的相对于文档或是父元素的位移
  • 是元素的border离父元素顶部的距离,故即便是margin撑开的距离,也算作offsetTop值
  • offsetParent是元素参考位移的父元素
    • offsetParent 即为最近的、有定位的、父元素
    • 父元素定位全没有,offsetParent即为<body>
    • <body>的offsetParent是null
  • 获取某元素距body顶端的距离,代码如下
        function getHeight(e){
            var h = 0;
            var obj = e;
            while(obj){
                h += obj.offsetTop;     // 不断累加e元素和其每个父元素的offsetTop
                obj = obj.offsetParent;
            }
            return h;
        }

innerHeight、outerHeight

  • window.innerHeight、innerWidth

    • 当前视图窗口的大小
    • 打开控制台、屏幕缩放都会导致窗口大小变化
    • 相关事件window.onresize
    • document.documentElement.clientHeight、clientWidth与之一致,都是表示可见区域宽高
  • window.outerHeight、outerWidth
    • 当前屏幕的大小
    • 电脑多大就是多大,不会改变的

 判断元素是否在视图窗口之内

如图所示,页面滚动的距离 scroll 在 [ offset - h1, offset + h2 ] 之间即算做在视图内

        function ifInWindow (element) {
            var s = document.body.scrollTop;
            var h1 = window.innerHeight;
            var off = getHeight(element);
            var h2 = element.clientHeight;
            if(s > off - h1 && s < off + h2){
                    return true;
            }
            return false;
        }

        function getHeight(e){
            var h = 0;
            var obj = e;
            while(obj){
                h += obj.offsetTop;     // 不断累加e元素和其每个父元素的offsetTop
                obj = obj.offsetParent;
            }
            return h;
        }

该功能可用于图片懒加载,图片懒加载的思路:在img标签上用data-src的自定义属性来保存图片地址,判断图片是否在可见区域内,在可见区域内则设置src,

时间: 2024-10-13 20:29:44

如何判断元素是否在当前文档显示区内?的相关文章

javascript判断元素存在和判断元素存在于实时的dom中的方法

今天(周六)下午我在公司加班时不知道要干什么,就打开公司的一个wordpress项目网站,想看下之前自己做的一个网页是否有问题. 打开网站首页,我习惯性的打开了chrome的调试工具,然后鼠标开始滚动页面,然后问题就出来了:页面无法向下滚动,调试工具的console里报了好多undefined的错误. 我马上意识到是我写的js代码错误的在首页被执行导致的问题,我的代码大致是这样: 1 if ($('#a')) { 2 // some code ... 3 $('#b').doSomething;

判断元素是否有重叠部分代码实例

判断元素是否有重叠部分代码实例:大家知道使用绝对定位或者说浮动的话,就可能导致两个元素重叠,而有时候在实际应用中,则要判断两个元素是否已经重叠,下面就通过一个实例介绍一下如何实现此效果,希望对需要的朋友有所帮助.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://w

Photoshop脚本 &gt; 复制一份当前文档

源自:http://coolketang.com/tutorials/menu2lesson7.php 本节将演示如何使用脚本,复制一份当前文档.首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 接着输入脚本代码: //定义一个变量[document],用来表示Photoshop当前的活动文档. var document = app.activeDocument; //定义一个变量[name],用来设置复制的新文档的名称. var nam

jQuery判断元素是否显示与隐藏

jQuery判断一个元素是显示还是隐藏,jQuery使用is()方法来判断一个元素是否显示,反之则为隐藏 核心代码 if($("#username").is(":hidden")){ } 实例代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test.html</ti

自动化测试——Selenium+Python判断元素是否可见,及元素未出现时设置超时时限

自动化测试中,有时可以根据某元素是否出现(即可见)来进行断言,判断元素是否可见的方法如下: from selenium.webdriver.support import expected_conditions as EC def is_element_visible(self, element): driver = self.driver try: the_element = EC.visibility_of_element_located(element) assert the_element

JS-004-JavaScript 操作常见 web 元素之四-判断元素显示状态

在日常的 web 编程或 UI自动化脚本编写过程中,经常会遇到判断页面元素的显示状态,以对应的执行相应的操作.此文主要以 js 判断页面元素的存在状态为例,简单叙述一下 js 是如何判断元素的显示状态的,敬请小主们参阅.若有不足之处,敬请大神们不吝指正,不胜感激! 多不言述,小二上码咯. 以下为简单的 HTML 源码,如下所示: 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content=&quo

前端学习随笔:float布局问题------float元素是否脱离了文档流

问题: 今天学习2016-03-13,我知道float的原始作用为实现文字的环绕效果,但是老师说:对元素设置float属性后,该元素依然处于标准文档流中,同时浮动会 引起父元素的高度塌陷问题(怎么解决,目前不知道).但是,紧随其后的块元素会无视设置float属性的元素,但是后面元素的文本依然会为float元素让出位置,环绕于周围.既然后元素没有按照标准文档流单独占一行,我是不是可以理解为浮动的元素脱离了文档流??前后矛盾了. 解答:回答这个问题之前,首先解释一下什么叫脱离文档流! css中脱离文

jQuery 判断元素上是否绑定了事件

我研究了一下之后发现,jQuery都将事件缓存起来了,其实也是为了防止内存溢出以及页面unload的时候的速度,也包括多函数触发,方便管理等诸多好处,具体可以参考此文. jQuery会在window.unload的时候卸载所有绑定过的事件,释放内存的. OK,言归正传.判断元素上是否绑定过事件用如下语句 jQuery.data(elem,"events")[type] //老版本也能用 $(elem).data("events")[type] //1.2.3以后才能

mongodb对数组元素及内嵌文档进行增删改查操作(转)

from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: <!-- lang: js --> { "_id" : "195861", "tags" : [ { "tagId" : NumberLong(766), "optDate" : ISODate(&qu