博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
元素大小与获取各种高度 宽度 距离总结
阅读量:6684 次
发布时间:2019-06-25

本文共 2519 字,大约阅读时间需要 8 分钟。

前言

项目开发中经常需要用到元素大小,网页高度,视口高度,各种距离等等,本文总结了获取各种宽高、距离的方法。

元素大小

祭出这几张神图,简单明了又清晰?

各种方法总结

注意:这些方法都不考虑混杂模式,请确保你的文档在标准模式下(填写了正确的doctype)否则获取的值会不准。

1. 获取整个网页高度与宽度

代码说明

1. 火狐不兼容document.body,所以使用document.documentElement

2. 理论上没有滚动条时scrollHeight和clientHeight相同,事实上各种浏览器有不同的处理,所以最保险的方法是取这俩中最大者。

function getPagearea(){  return {      width: Math.max(document.documentElement.scrollWidth,             document.documentElement.clientWidth),      height: Math.max(document.documentElement.scrollHeight,              document.documentElement.clientHeight)  }}复制代码

PS:jq的话  $(document).height();          $(document).width();

2. 获取视口高度与宽度

代码说明

1. 同上,火狐不兼容document.body,所以使用document.documentElement

function getViewport() {   return {     width: document.documentElement.clientWidth,     height: document.documentElement.clientHeight   }}复制代码

PS:jq的话 $(window).height();           $(window).width();

3. 获取元素距页面高度

function getElementTop(el) { let actualTop = el.offsetTop; let current = el.offsetParent;   while (current !== null) {   actualTop += current.offsetTop;   current = current.offsetParent; } return actualTop;}复制代码

PS:jq的话 jq对象.offset().top          jq对象.offset().left

4. 获取元素到视口的距离

使用  方法 

getBoundingClientRect方法返回元素的大小及其相对于视口的位置。  

5. 获取纵向滚动条高度或横向滚动条长度

代码说明

同1,火狐不兼容document.body,所以使用document.documentElement

function getScrollTop() {     let doc = document;     return Math.max(doc.body.scrollTop, doc.documentElement.scrollTop)};function getScrollLeft() {     let doc = document;     return Math.max(doc.body.scrollLeft, doc.documentElement.scrollLeft)};复制代码

6. 获取鼠标到元素、视口、文档、屏幕距离

这种主要是读取event对象中的值,具体看下图比较清晰。

一个使用例子

上下滚动时判断元素在视口中出现

这个例子使用到了上面的方法

document.onscroll = () => {    let dom = document.getElementById('box');    let top = getElementTop(dom); // 元素距页面高度    let scrollTop = getScrollTop(); // 获取滚动条高度    let viewPortHeight = getViewport().height; // 获取视口宽高    if (top > scrollTop && top <= scrollTop + viewPortHeight) {         console.log('元素出现')    }}// 写法2:配合getBoundingClientRect判断document.onscroll = () => {  let dom = document.getElementById('box2');  let rectTop = dom.getBoundingClientRect().top;  let viewPortHeight = getViewport().height;    if (rectTop > 0 && rectTop < viewPortHeight) {      console.log('元素出现')  }}// 用jq的话document.onscroll = () => {  let $dom = $('#box');  let top = $dom.offset().top;  let scrollTop = $(window).scrollTop();  let viewPortHeight = $(window).height();    if (top > scrollTop && top <= scrollTop + viewPort.height) {      console.log('元素出现')  }}复制代码

转载于:https://juejin.im/post/5ce00cac6fb9a07ee9583f17

你可能感兴趣的文章
Microsoft Visual C++ Runtime library not enough space for thread data
查看>>
Centos 7 ntp时间服务器搭建
查看>>
电压电流采集模块,温湿度采集,称重模块,变送器,adc模数转换模块
查看>>
RAID和LVM
查看>>
学hadoop需要什么基础
查看>>
2019北京物联网智慧城市大数据博览会开启中国之路
查看>>
华为云网络服务两场景
查看>>
将 Desktop Central 与帮助台和 OS Deployer 集成
查看>>
技巧分享:caj怎么转化为pdf
查看>>
WebPack牛刀小试
查看>>
技巧: iPhone玩游戏手机发烫?有妙招
查看>>
标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)
查看>>
SQL Server 2008高可用×××介绍
查看>>
STP收敛
查看>>
VirtualBox无法进入Win8PE的桌面
查看>>
Cisco3550 交换机 端口限速
查看>>
Linux卸载系统自带的httpd的方法
查看>>
《Oracle从入门到精通》读书笔记第十五章 Oracle数据备份与恢复之二
查看>>
Android安全讲座第九层(二) 内存dump
查看>>
弹出菜单效果
查看>>