Appearance
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
html, body {
height: 500%;
/* background: -webkit-linear-gradient(sky); */
}
#link {
width: 100px;
height: 100px;
background: orange;
position: fixed;
right: 20px;
bottom: 150px;
display: none;
}
#box {
width: 100px;
height: 100px;
background: orange;
}
</style>
</head>
<body>
<!--
JS盒子模型: 基于一系列属性可以获取到盒子的一些样式
1.没必要再基于getComputedStyle获取每一部分的样式自己去计算,对于获取某些样式比较方便
2.获取的结果直接不带单位,是纯数字,可以直接进行数学运算
3.获取的结果是一个整数.这样会存在1px以内的误差
client系列
clientWidth/Height 内容的宽/高 + padding
如果盒子设置了固定高度,内容溢出,无论是否设置overflow: hidden,结果都是不变的,
由原来设置的高度来决定
document.documentElement.clientWidth/Height 当前页面可视区(浏览器窗口)的宽/高
=> 首屏宽/高
在部分低版本浏览器不兼容,需要基于document.body.clientWidth/Height
document.documentElement.clientWidth || document.body.clientWidth/Height
clientLeft/Top 盒子左/上边框的大小
offset系列 内容的宽/高 + padding + border
offsetWidth/Height 如果没有边框,结果和clientWidth/Height一样,一般用来获取盒子真实大小
offsetLeft/Top 获取当前元素外边框距离其父参照物内边框的左/上偏移
offsetParent 获取当前元素的父参照物(不一定是它的父元素) 默认情况下所有文素都在
同一平面(文档流)中,所以所有元素的父参照物都是body
outer.position = 'relative/fixed/absolute' 形成一个全新的全面(文档流),outer
里面的元素父参照物变为outer
scroll系列
scrollWidth/Height
内容没有溢出的情况下,结果和clientWidth/Height相同
内容溢出的情况下,结果是内容的宽/高(包含溢出内容) + 左/上padding,应用于在有内容
溢出情况下获取盒子真实大小
获取的结果是约等于的值,在不同浏览器或者是否设置overflow: hidden的情况下,获取结果都是不同的
document.documentElement.scrollHeight || document.body.scrollHeight 用于
获取页面真实高度,包括其他内容(第一屏到最后一屏)
scrollLeft/Top 滚动条卷去的宽/高
最小值: 0
最大值: 页面真实宽高(scrollWidth/Height) - 屏幕宽高(clientWidth/Height) 滚动到底部了
getBoundingClientRect 获取当前盒子与浏览器"可视化窗口位置"的信息
top: 元素顶部和视口顶部的距离
left: 元素坐部和视口左部的距离
right: 元素右部和视口左部的距离
bottom: 元素底部和视口顶部的距离
box.getBoundingClientRect()
只有scrollLeft/Top是可读写属性,其余都是只读属性
回到顶部 document.documentElement.scrollTop = 0
-->
<div id="link"></div>
<div id="box"></div>
<script>
console.log(box.offsetLeft)
link.onclick = function () {
document.documentElement.scrollTop = 0
}
// 鼠标滚轮/拖动滚动条/方向键/js代码控制都会触发滚动事件
window.onscroll = function () {
let curH = document.documentElement.scrollTop,
screenH = document.documentElement.clientHeight
link.style.display = curH > screenH ? 'block' : 'none'
}
</script>
</body>
</html>