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中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
Apr 01 Javascript
如何使用Javascript正则表达式来格式化XML内容
Jul 04 Javascript
jQuery封装的获取Url中的Get参数示例
Nov 26 Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
jQuery表单验证功能实例
Aug 28 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
Jan 04 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 Javascript
Vue单页应用引用单独的样式文件的两种方式
Mar 30 Javascript
js中async函数结合promise的小案例浅析
Apr 14 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
Java中final关键字详解
2015/08/10 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
angularJS开发注意事项
2018/05/26 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
深入理解Python 代码优化详解
2014/10/27 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
对python字典过滤条件的实例详解
2019/01/22 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
EJB的激活机制
2013/10/25 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
实习协议书
2015/01/27 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL