一张图带你了解 JavaScript DOM、事件的尺寸和位置

本文主要总结整理了事件参数、Window、Element中的位置和尺寸属性

一张图带你了解 JavaScript DOM、事件的尺寸和位置

DOM尺寸&位置.png

event

  • event.screenY 鼠标指针相对于全局(屏幕)的Y坐标;
  • event.clientY 鼠标指针在点击元素(DOM)中的Y坐标。
  • event.pageY 鼠标指针相对于整个文档的Y坐标;
  • event.y MouseEvent.clientY的别名。
  • event.offsetY 鼠标指针相对于目标节点内边位置的Y坐标
  • event.layerX 返回事件相对于当前图层的水平坐标。

window

  • Window.pageYOffset 只读 window.scrollY的别名。
  • Window.scrollY 只读 返回文档已经垂直滚动的像素数。
  • Window.screenY and Window.screenTop 只读 这两个属性都返回从用户浏览器视口的顶部边框到屏幕顶部的垂直距离。
  • Window.outerHeight 只读 返回浏览器窗口的外部高度。
  • Window.innerHeight 只读 获得浏览器窗口的内容区域的高度,包含水平滚动条(如果有的话)。
  • window.screen
  • Screen.availHeight 指定屏幕的高度,以像素为单位,减去操作系统显示的永久或半永久用户界面功能,例如Windows上的“任务栏”。
  • Screen.height 以像素为单位返回屏幕的高度。
  • Screen.availTop 指定未分配给永久或半永久用户界面功能的第一个像素的y坐标。

box

  • Element.clientHeight 只读 返回Number 表示内部相对于外层元素的高度。
  • Element.clientTop 只读 返回 Number 表示该元素距离它上边界的高度。
  • Element.scrollHeight 只读 返回类型为: Number,表示元素的滚动视图高度。
  • Element.scrollTop 返回类型为:Number ,表示该元素纵向滚动条距离 返回类型为:Number ,表示该元素纵向滚动条可移动的最大值
  • HTMLElement.offsetTop 为只读属性,它返回当前元素相对于其 offsetParent 元素的顶部内边距的距离。
  • HTMLElement.offsetHeight 是一个只读属性,它返回该元素的像素高度,高度包含该元素的垂直内边距和边框,且是一个整数。

示例完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>一张图带你了解 JavaScript DOM、事件的尺寸和位置</title>
  <style>
  * {
    margin: 0;
    padding: 0;
  }

  .container {
    border: 1px red solid;
    position: absolute;
    width: 100%;
    height: 1500px;
    box-sizing: border-box;
  }

  .container .info {
    position: fixed;
    z-index: 1;
  }

  .container .box {
    width: 200px;
    height: 200px;
    border: 30px green solid;
    padding: 20px;
    margin: 20px;
    position: absolute;
    left: 100px;
    top: 200px;
  }

  .container .box::after {
    content: "";
    display: inline-block;
    position: absolute;
    top: 150px;
    left: 150px;
    border: 5px red solid;
    border-radius: 50%;
  }

  .container .box .pre {
    height: 100%;
    border: 1px pink solid;
    box-sizing: border-box;
  }

  .container .wrap {
    width: 200px;
    height: 150px;
    border: 20px blue solid;
    padding: 10px;
    margin: 20px;
    position: absolute;
    left: 100px;
    top: 600px;
    overflow: auto;
  }

  .container .wrap .pre {
    height: 350px;
    border: 1px pink solid;
    box-sizing: border-box;
  }

  .group {
    position: absolute;
    top: 610px;
    right: 100px;
  }
  </style>
</head>
<body>

<div class="container" id="container">
  <pre class="info">
.container {
  border: 1px red solid;
  position: absolute;
  width: 100%;
  height: 1500px;
  box-sizing: border-box;
}
  </pre>
  <div class="box" id="box">
    <pre class="pre">
.container .box {
  width: 200px;
  height: 200px;
  border: 30px green solid;
  padding: 20px;
  margin: 20px;
  position: absolute;
  left: 100px;
  top: 200px;
}
    </pre>
  </div>
  <div class="wrap" id="wrap">
    <pre class="pre">
.container .wrap {
    width: 200px;
    height: 150px;
    border: 20px blue solid;
    padding: 10px;
    margin: 20px;
    position: absolute;
    left: 100px;
    top: 600px;
  }
    </pre>
  </div>
</div>

<div class="group">
<pre class="pre">
.container .wrap {
  width: 200px;
  height: 150px;
  border: 20px blue solid;
  padding: 10px;
  margin: 20px;
  position: absolute;
  left: 100px;
  top: 600px;
}
</pre>
  <pre class="pre">
.container .wrap .pre {
  height: 350px;
  border: 1px pink solid;
  box-sizing: border-box;
}
</pre>
</div>


<script>
var container = document.getElementById("container");
var box = document.getElementById("box");
var wrap = document.getElementById("wrap");
box.addEventListener("click", function(e) {
  console.log("box click event", e);
  console.log("box click e.target", e.target);
  console.log("box click e.screenY", e.screenY);
  console.log("box click e.clientY", e.clientY);
  console.log("box click e.pageY", e.pageY);
  console.log("box click e.offsetY", e.offsetY);
  console.log("box click e.layerY", e.layerY);

  console.log("window.scrollY", window.scrollY);
  console.log("window.screenY", window.screenY);
  console.log("window.outerHeight", window.outerHeight);
  console.log("window.innerHeight", window.innerHeight);
  console.log("window.screen.availHeight", window.screen.availHeight);
  console.log("window.screen.height", window.screen.height);
  console.log("window.screen.availTop", window.screen.availTop);

  console.log("box.clientHeight", box.clientHeight);
  console.log("box.clientTop", box.clientTop);
  console.log("box.scrollHeight", box.scrollHeight);
  console.log("box.scrollTop", box.scrollTop);
  console.log("box.offsetTop", box.offsetTop);
  console.log("box.offsetHeight", box.offsetHeight);
});

window.addEventListener("scroll", function() {
  //声明 <!DOCTYPE html>时使用
  console.log("document.documentElement.scrollTop", document.documentElement.scrollHeight);
  console.log("document.documentElement.scrollTop", document.documentElement.scrollTop);
  //未声明 <!DOCTYPE html> 时使用
  // console.log("document.body.scrollTop", document.body.scrollTop);
  // console.log("document.body.scrollHeight", document.body.scrollHeight);
});

wrap.addEventListener("scroll", function() {
  console.log("wrap.scrollHeight", wrap.scrollHeight);
  console.log("wrap.scrollTop", wrap.scrollTop);
});

setTimeout(function(){
  window.scrollTo(0, 119);
  wrap.scrollTop = 100;
},1000)

</script>
</body>
</html>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容

  • 收集于网络,特此整理。 多看看API,总是没坏处~ 一、节点 1.1 节点属性 Node.nodeName //...
    前端程序猿阿旭阅读 5,334评论 1 1
  • 原文 https://www.kancloud.cn/dennis/tgjavascript/241852 一、节...
    LuckyS007阅读 841评论 0 0
  • Element对象对应网页的HTML标签元素。每一个HTML标签元素,在DOM树上都会转化成一个Element节点...
    许先生__阅读 1,793评论 0 2
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,470评论 1 11
  • 有时候一些理所当然的事,一细想之后才发现,没那么简单。 问:为何delegate要用weak引用,而不是stron...
    Mad_Mark阅读 1,529评论 2 52