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 相关文章推荐
JavaScript关于select的相关操作说明
Jan 13 Javascript
FileUpload上传图片(图片不变形)
Aug 05 Javascript
浅谈javascript六种数据类型以及特殊注意点
Dec 20 Javascript
AngularJS基础知识笔记之过滤器
May 10 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
vue todo-list组件发布到npm上的方法
Apr 04 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
使用react render props实现倒计时的示例代码
Dec 06 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
package.json中homepage属性的作用详解
Mar 11 Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 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 CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP7.0版本备注
2015/07/23 PHP
php json相关函数用法示例
2017/03/28 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
node.js中watch机制详解
2014/11/17 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
python通过函数属性实现全局变量的方法
2015/05/16 Python
python 读入多行数据的实例
2018/04/19 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
生产车间班组长岗位职责
2014/01/06 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
学校师德师风整改方案
2014/10/28 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
天气温馨提示语
2015/07/14 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python