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 相关文章推荐
ie 调试javascript的工具
Apr 29 Javascript
Jquery乱码的一次解决过程 图解教程
Feb 20 Javascript
google 搜索框添加关键字实现代码
Apr 24 Javascript
Jquery ajaxsubmit上传图片实现代码
Nov 04 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
当jQuery1.7遇上focus方法的问题
Jan 26 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
javascript中正则表达式语法详解
Aug 07 Javascript
详解 javascript对象创建模式
Oct 30 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
php中CI操作多个数据库的代码
2012/07/05 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
Destoon实现多表查询示例
2014/08/21 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python pygame实现方向键控制小球
2019/05/17 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
领导干部考察材料
2014/02/08 职场文书
初中学生期末评语
2014/04/24 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
社区义诊通知
2015/04/24 职场文书
生活小常识广播稿
2015/08/19 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python