BOM
offset(只读,不可写)
ele.offsetParent
获取元素第一个有定位的父级元素(如果一直找不到就会返回
ele.offsetWidth
获取元素宽度 (padding + width + border)
ele.offsetHeight
获取元素高度 (padding + height + border)
ele.offsetTop
获取元素顶部到有定位的父级元素的上内边距外侧(上外边距内侧)的距离(也就是到外边距就停)。当定位元素为 body 时,获取到页面顶端的距离(不管 body 是否有 border)
ele.offsetLeft
获取元素顶部到有定位的父级元素的左内边距外侧(左外边距内侧)的距离。当定位元素为 body 时,获取到页面最左侧的距离(不管 body 是否有 border)
以上获取的数值都是整数(一般会自动向上取整,遇 1 向下取整,遇 2 以上都向上取整),不带 ‘px’ 的。( ele.style.top/left 是带 px 的)
动画
缓速动画(速度越来越慢)
步长公式:(终点 - 起点) / 10 ,因为每经过一次步长的距离,起点的位置都会改变,导致差值变小,步长也变小, 10 是为了曲小数点后最多只有一位值。 到终点距离小于 10px 时,设定 步长为 1
事件对象
1 | event.type // 事件类型 |
事件冒泡
1 | event.stopPropagation() // 阻止事件冒泡 IE <= 10下 event.cancelBubble = true |
事件委托
1 | <ul id="ulEle"> |
行为型事件委托
1 | <p data-count>0</p> |
鼠标事件
1 | <style> |
拖拽
1 | <style> |
自定义属性
1 | <p data-title="123abc"></p> |
获取最近的符合条件的元素
1 | <!--ele..closest(这里写 CSS 选择器) 选择最近的符合条件的自己或者父级元素 --> |
scroll
scrollTop
、scrollLeft
可以被读写,获取元素滚动条当前的滚动高度(即卷入高度)、长度,没有滚动条时为 0
scrollHeight
、 scrollWidth
获取上下(左右)内边距与内容区之和的高度(宽度)。元素内容超出元素宽高时:
- 元素设置有 overflow 时(不一定是hidden!),
scrollHeight
计算上下边距与内容区,scrollWidth
计算左边距与内容区。 - 元素不设置 overflow 时,
scrollHeight
计算上边距与内容区,scrollWidth
计算左边距与内容区。
获取页面当前滚动条卷入的高度、长度
1 | document.body.scrollTop |
onscroll 事件
设置此事件的元素一定要有滚动条
window 滚动的方法
window.scroll(x, y)
让页面滚动到指定位置
window.scrollBy(x, y)
让页面滚动设定的值的长度,正值为向右/下滚动
window.scrollTo(x, y)
同window.scroll()
,但这个低版本IE 不兼容。
实现页面顺滑滚动 (smooth scroll)
html { scroll-behavior: smooth;}
window.scroll(options)
传入一个对象作为参数,有 top( 默认 0 )、left( 默认 0 )、behavior( 默认 auto ),都是可选项window.scrollBy({top: 1000, left: 1000, behavior:"smooth"})
ele.scrollIntoView(options)
IE 不支持 options, 是个实验属性,浏览器支持不好
防抖
触发事件在 n 秒内函数只执行一次,如果在 n 秒内又触发了事件,则重新计算函数执行时间,再持续 n 秒。
实际上是每次触发时,如果已经存在定时器,就清除上一次的定时器之后,再添加一个新的定时器。
可以用在搜索联想,当用户输入时,每隔一定时间间隔自动帮助拓展
1 | // 执行后计时 |
节流
在一定时间内只执行一次函数,可以用在滚动事件与 move 事件中
1 | function throttle(func, wait) { |
client
clientWidth/Height
自身宽高 + padding ,不计算溢出内容,不计算滚动条宽度
clientTop
它的内边距外侧到父元素的宽度,感觉就是它的边框宽度
document.documentElement.clientWidth/Height
window.innerWidth/Height
获取表示 window 可视区域的大小,计入滚动条占的宽高。 不兼容 IE10 以下
window.
总结
clientWidth
计算自身宽、左右 padding,不计算滚动条宽度offsetWidth
计算自身宽、左右 padding、左右 borderscrollWidth
计算自身宽与左右 padding,有 overflow 属性且内容超出时 计算自身宽与左 padding。scrollHeight
计算自身高与上下 padding,有overflow 属性且内容超出时 计算自身高与上下 padding,无 overflow 属性时,计算自身高与上 paddingwindow.innerWidth
可视区域高度scrollWidth
:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。clientWidth
:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变。offsetWidth
:对象整体的实际宽度,包滚动条等边线,会随对象显示大小的变化而改变。情况1:
元素内无内容或者内容不超过可视区,滚动不出现或不可用的情况下。
scrollWidth = clientWidth
,两者皆为内容可视区的宽度。offsetWidth
为元素的实际宽度。情况2:
元素的内容超过可视区,滚动条出现和可用的情况下。
scrollWidth > clientWidth
。scrollWidth
为实际内容的宽度。clientWidth
是内容可视区的宽度。offsetWidth
是元素的实际宽度。
网页可见区域高:document.body.clientHeight
网页正文全文高:document.body.scrollHeight
网页可见区域高(包括边线的高):document.body.offsetHeight
网页被卷去的高:document.body.scrollTop
屏幕分辨率高:window.screen.height
通常情况下,你如果要获取一个元素的真正大小,是需要对它的clientHeight和scrollHeight进行判断的,哪一个大,哪一个就是它的真实高度
offsetWidth/Height = content + padding + border
scrollWidth/Height = content + padding
内容超出时显示 content + paddingLeft + paddingTop
,如果同时还有 overflow 属性 content + paddingLeft + paddingTop + paddingBottom
clientWidth/Height = content + padding
内容超出不计算、滚动条宽度不算
offsetTop/left
= 盒子与它的 offsetParent 的border 之间的距离,如果 offsetParent 是 body 的话,border 也算在内
scrollTop/Left
= 页面或元素被卷入高度 页面卷入高度: document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop
clientTop/Left
= 元素的上左 border 的宽度,配合 offsetTop/Left
计算任意元素距离页面的上左边距
1 | // 所以子元素 一直取 到有定位的父元素 margin 的距离 加上 父元素 margin 的距离 ,最后取到 父元素为 body 时,就是元素在页面中的高度 |
页面高度相关总结
1 | document.body.scrollHeight // 好像是整个页面高度,下面的话作废 |
window
window.onload
页面完全加载完毕时调用 ( 中的 css、