JS判断指定dom元素是否在屏幕内的方法实例


Posted in Javascript onJanuary 23, 2017

前言

刷网页的时候,有时会遇到这样一个情景,当某个dom元素滚到可见区域时,它就会展现显示动画,十分有趣。那么这是如何实现的呢?

实现原理

想要实现这个功能,就要知道具体的实现原理。下面直入主题。

我们通过浏览器在浏览一个网页时候是这个样子的,如图所示

JS判断指定dom元素是否在屏幕内的方法实例

页面的长宽,以及各dom的坐标都是静止的,动的是显示窗口坐标而已。所以明白了这个,那么判断一个dom元素是否可见时,就十分简单了。

我们需要知道三个坐标就可知道当前dom是否在可见区域内,分别是

  1. 显示窗口的顶部坐标
  2. 显示窗口的底部坐标
  3. dom元素的中心坐标

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

OK,那么接下来就是要知道这三个坐标怎么计算了。

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

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

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

原理就是那么的简单有木有。

具体实现

明白了原理,具体实现起来就很简单啦。下面直接贴上一个简单的dom代码做下示例,在实际的生产中还是要优化的,比如初次的首屏显示等等,这里就不赘述了。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<style type="text/css">
 .box {
 width: 100%;
 height: 200px;
 background: #ff0000;
 margin-bottom: 10px;
 text-align: center;
 color: #fff;
 line-height: 200px;
 font-family: microsoft yahei;
 font-size: 40px;
 
 }
 .animate{
 animation: showText 1s;
 }
 @keyframes showText
 {
 from {
 font-size: 20px;
 }
 to {
 font-size: 40px;
 }
 }
</style>
<body>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</body>
<script type="text/javascript">
 
 var box = document.getElementsByClassName('box');
 document.addEventListener('scroll',function(){
  
  //滚动条高度+视窗高度 = 可见区域底部高度
  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&¢erY<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+'个区域不可见');
  }
  }
 })
</script>
</html>

效果图

JS判断指定dom元素是否在屏幕内的方法实例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
Jun 28 Javascript
JS小功能(onmouseover实现选择月份)实例代码
Nov 28 Javascript
angularjs 处理多个异步请求方法汇总
Jan 06 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
js select下拉联动 更具级联性!
Apr 17 Javascript
jQuery上传多张图片带进度条样式(DEMO)
Mar 02 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
如何在vue里添加好看的lottie动画
Aug 02 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
jQuery弹出层插件popShow用法示例
Jan 23 #Javascript
Javascript中for循环语句的几种写法总结对比
Jan 23 #Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
Jan 23 #Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
Jan 23 #Javascript
canvas绘制表盘时钟
Jan 23 #Javascript
canvas绘制的直线动画
Jan 23 #Javascript
node.js实现复制文本到剪切板的功能
Jan 23 #Javascript
You might like
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
python实现指定字符串补全空格的方法
2015/04/30 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python中的pack和unpack的使用
2018/03/12 Python
python format 格式化输出方法
2018/07/16 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python编写打字训练小程序
2019/09/26 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
董事长秘书岗位职责
2013/11/29 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
企业管理标语
2014/06/10 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server