问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何判断指定dom元素是否在屏幕内

发布网友 发布时间:2022-04-22 16:19

我来回答

2个回答

懂视网 时间:2022-04-22 20:41

应用场景:只要页面加载了,其中在页面中出现的li就向控制台输出第几个发送请求;在本次加载的页面中,再将滚动条滚回前边的li,不再向控制台输出东西,也就是说已经显示过的li,不再向控制台输出东西。

<body>
<ul>
<li onclick="jumpOther()">0001</li>
<li>0002</li>
<li>0003</li>
<li>0004</li>
<li>0005</li>
<li>0006</li>
<li>0007</li>
<li>0008</li>
<li>0009</li>
<li>00010</li>
<li>00011</li>
<li>00012</li>
<li>00013</li>
<li>00014</li>
<li>00015</li>
<li>00016</li>
<li>00017</li>
<li>00018</li>
<li>00019</li>
<li>00020</li>
<li class="ts">00021</li>
<li>00022</li>
</ul>
</body>

思路一:

定义了一个全局变量lastItem,用来记下最后显示的li的index;如此,当li的index>lastItem,就表示li还没展示过,能输出东西。

 <script type="text/javascript">
 var lastItem=0;
	$(document).ready(function () { 
		sendAsk();
		window.addEventListener("scroll",function(e){
			sendAsk();
		});
	});
function sendAsk(){
		var lis= $('ul').find("li");
//swHeight=滚动的高度+窗体的高度;当li的offset高度<=swHeight,那么说明当前li显示在可视区域了
		 var swHeight=$(window).scrollTop()+$(window).height();
	 $.each(lis, function (index, item) {
	  mTop=item.offsetTop;
	  var dItem=index+1;
	  if(mTop<swHeight&&dItem>lastItem){
	  	console.log(index+1+"个发送请求 ");
	  	lastItem+=1;
	  }
	 });
	}
</script>

思路二:

给每个li动态添加一个属性,用来表示这个li是否显示过;在发送请求后,设置属性为true即可;未显示过不添加属性即可。

function sendAsk() {
		var lis= $('ul').find("li");
		 //swHeight=滚动的高度+窗体的高度;当li的offset高度<=swHeight,那么说明当前li显示在可视区域了
		 var swHeight=$(window).scrollTop()+$(window).height();
	 $.each(lis, function (index, item) {
	  mTop=item.offsetTop;
	  if(mTop<swHeight&&!item.getAttribute("data-send")){
	  	console.log(index+1+"个发送请求 ");
	  	item.setAttribute("data-send","true");
	  }
	 });
	}

思路三:

利用getBoundingClientRect()方法,只要其中的.top<=可视区域的高度即可

function sendAsk(){
			var lis= $('ul').find("li");
		 //swHeight=滚动的高度+窗体的高度;当li的offset高度<=swHeight,那么说明当前li显示在可视区域了
		 var swHeight=$(window).height();
	 $.each(lis, function (index, item) {
	  mTop=item.getBoundingClientRect().top;
	  console.log(mTop);
	  if(mTop<=swHeight){
	  	console.log(index+1+"个发送请求 ");
	  }
	 });
	}

热心网友 时间:2022-04-22 17:49

当dom元素的中心坐标的X及Y坐标均小于显示窗口的顶部,且大于显示窗口的底部坐标时,那么就可以判断该坐标在可见区域。 

首先是窗口的顶部坐标,顶部坐标就是页面的滚动条滚动的距离。 

其次是底部坐标,底部坐标就是滚动条的距离加上当前可视窗口的高度。 

最后dom元素的中心距离,就是这个dom元素到最顶端的高度加上自身高度的除2

var visibleBottom = window.scrollY + document.documentElement.clientHeight;
            //可见区域顶部高度
            var visibleTop = window.scrollY;

            for (var i = 0; i < box.length; i++) {
                var centerY = box[i].offsetTop+(box[i].offsetHeight/2);
                if(centerY>visibleTop&&centerY<visibleBottom){
                    box[i].innerHTML = '区域可见'
                    box[i].setAttribute("class",'box animate')
                    console.log('第'+i+'个区域可见');
                }else{
                    box[i].innerHTML = '';
                    box[i].setAttribute("class",'box')
                    console.log('第'+i+'个区域不可见');
                }
            }

。 

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么是诸葛亮 卧龙,凤雏,冢虎,幼麟得一可安天下,为啥刘备失败? 潮州老式粿汁的做法 求一篇六百字作文。题目大概是:找一个话题跟父母展开一次朋友式的... 老师让以某个话题,给父母进行一次朋友式的书信往来, 急急急!! 与父母进行一次朋友式的通信。 我该怎样和室友相处呢,我们宿舍很糟糕,很差? 京东商城我的用户上有钱怎么用用户上的钱买东西啊 我在我朋友那个京东账户里有钱可他没实名怎么可以用那些钱来买... 上海市护士延续注册怎么办理 这是一种野生植物,我们儿时叫他“赖瓜”不知道学名叫啥。请各位帮助_百... 不饿,但是肚子一直在叫为什么 人的肚子为什么会叫? 密州春宴宾白酒蓝箱36度6盒装490ml价格 为什么肚子会叫? 新婚喜宴36个人该怎么办酒席 肚子为什么会叫? 宝宝多大可以吃胚芽米粥 论中美行政制度的异同 运用《经济生活》的有关知识,评析中美经贸关系 2008年10月27日世界发生了什么大事 抗战胜利后国民政府为什么与美国签定一系列不平等条约 20世纪40年代中期列强侵华的主要格局 顶层房子墙面有裂缝怎么回事怎么处理 顶层墙面45度裂缝是怎么产生的? 动漫设计在广告中的应用论文 5000字 为什么顶楼墙体会容易出现裂痕? 如何注销? 怎样将注销 如何注销? 好看的闺蜜头像,一左一右,真人,不要动漫 哪些物质遇到明火会发生爆炸 哪些物质可能引起爆炸事故?遭遇突发爆炸时应该如何自救? 有什么物质能引起爆炸? 美国一化工厂发生爆炸,有哪些放在一起会爆炸的物品? 生活那些东西碰到一起会产生化学反应 发生爆炸 哪些物质遇到明火会发生爆炸? 什么物质碰撞发生爆炸? 空气中存在什么物质浓度过高遇火会引起爆炸或燃烧 有什么物质碰撞物体会发生爆炸? 甲烷在什么条件容易发生爆炸?该如何避免甲烷气体爆炸? 怎么得到有机硒?有机硒是什么意思? 帮举几个常温下能在空气中氧化,导致迅速自燃或爆炸的物质 引起爆炸的易燃物质是指易燃气体液体的什么 看了腾讯Q3财报,想问问大家怎么看待腾讯金融科技这项业务的发展? 在淘宝网上买了东西后几天自动付款? 淘宝自动默认付款是多少天? 淘宝的自动付款是几天? iPhone6点开了通用的软件更新安装了 显示的是正在验证 弄了好久 看到没什么反应就强制关机 后 淘宝发货后几天自动确认付款