蝙蝠岛资源网 Design By www.hbtsch.com

关于元素的一些属性

在前端的日常开发中,我们经常无可避免的需要获取或者监听一些页面的属性,那么我们需要经常了解一些属性代表的含义才能更好地使用这些属性。特别是一下这些:

  • 尺寸相关:offsetHeight、clientHeight、scrollHeight;
  • 偏移相关:offsetTop、clientTop、scrollTop、pageYOffset、scrollY;
  • 获取相对视口位置:Element.getBoundingClientRect();
  • 获取元素的style对象:Window.getComputedStyle(Element);

属性的定义

关于尺寸相关的属性定义:

offsetHeight: Element.offsetHeight是一个只读属性,返回的是元素对应的高度px的值,是一个整数值,不存在小数,

  • 隐藏元素返回0;
  • 其他返回:元素的innerHeight + padding + border + margin + 滚动条;但是不包括里面的::before or ::after伪元素;

clientHeight: Element.clientHeight是一个只读属性,返回的是元素对应的高度px的值,是一个整数值,不存在小数,

  • 对于没有设置样式或者inline元素而言,返回的是0,
  • 对于html元素或者怪异模式下的body,返回的是viewport高度,也就是整个页面视口高度
  • 其他情况下:元素的innerHeight + padding;不包括border、margin、滚动条;

scrollHeight: 是一个只读属性,返回的是元素对应的高度px的值,是一个整数值,不存在小数,

  • 在子元素不存在滚动情况下,和Element.clientHeight一样
  • 在子元素存在滚动情况下,会是所以子元素的clientHeight高度之和 + 自身padding;

window.innerHeight: (浏览器窗口高度,不包含工具栏,菜单等,仅仅是可视区域dom的height)
window.outerHeight: (浏览器窗口高度,包含工具栏、菜单等,整个浏览器的height)

关于偏移:

offsetTop:只读属性,返回元素距离最近一个相对定位的父元素内边线的顶部距离,实际使用时可能存在不同样式引起的相对定位父元素不一致的兼容性问题。
clientTop:上边框的宽度
scrollTop:

  • 对于滚动元素而言,就是已经滚动的距离,
  • 对于html而言,就是window.scrollY

window.scrollY,别名:window.pageYOffset,根节点已经垂直滚动的距离

开发中所需的相关数据

获取整个页面的可视区高度:【不需要可视区外的高度】

const height = window.innerHeight
    || document.documentElement.clientHeight
    || document.body.clientHeight;

获取整个页面的高度:【包括可视区外的】

const height = document.documentElement.offsetHeight
    || document.body.offsetHeight;

获取整个页面的垂直滚动高度:

const scrollTop = document.documentElement.scrollTop
    || document.body.scrollTop;

获取元素相对根节点顶部的距离:

// 对于相对于根节点定位的元素
const top = Element.offsetTop;

// 对于非相对于根节点定位的元素,需要循环获取
getElementTop(element) {
      let actualTop = element.offsetTop
      let current = element.offsetParent

      while (current !== null) {
        actualTop += current.offsetTop
        current = current.offsetParent
      }
      return actualTop
}

// 还有一中方法 滚动距离 + 距离视口上边距
const top = Element.getBoundingClientRect().top + window.scrollY;

获取元素相对可视区域顶部距离:

const top = Element.getBoundingClientRect().top;

设置整个页面的垂直滚动位置:

const isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");
if (isCSS1Compat) {
    document.documentElement.scrollTop = 100;
} else {
    document.body.scrollTop = 100;
}

标签:
height,offsetHeight,clientHeight,scrollTop

蝙蝠岛资源网 Design By www.hbtsch.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
蝙蝠岛资源网 Design By www.hbtsch.com

评论“详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理”

暂无详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。