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的Validation插件中Remote验证的中文问题
Jul 26 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
jquery查找父元素、子元素(个人经验总结)
Apr 09 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
从零学JSON之JSON数据结构
May 19 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
react-native 完整实现登录功能的示例代码
Sep 11 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
通过js动态创建标签,并设置属性方法
Feb 24 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
js回调函数仿360开机
Dec 26 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开发者的10个技巧
2011/02/25 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
JS日历 推荐
2006/12/03 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python 字典(dict)按键和值排序
2016/06/28 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
详解python中*号的用法
2019/10/21 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
求职信范文英文版
2014/01/05 职场文书
好学生评语大全
2014/05/05 职场文书
爱国口号
2014/06/19 职场文书
置业顾问岗位职责
2015/02/09 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript