笔记内容为 JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts黑马pink老师前端入门基础视频教学 教学课程的整理
元素偏移量 offset 系列
offset 概述
- offset 翻译过来就是偏移量,我们使用 offset 系列相关属性可以
动态的 得到该元素的位置(偏移)、大小等。
- 获得元素距离带有定位父元素的位置
- 获得元素自身的大小(宽度高度)
- 注意:返回的数值都不带单位
offset 系列常用属性
| offset 系列属性 | 作用 |
|---|
| element.offsetParent | 返回作为该元素带有定位的父级元素,如果父级都没有定位则返回 body |
| element.offsetTop | 返回元素 相对 带有定位父元素 上方 的偏移 |
| element.offsetLeft | 返回元素 相对 带有定位父元素 左边框 的偏移 |
| element.offsetWidth | 返回自身包括 padding、边框、内容区的宽度,返回数值不带单位 |
| element.offsetHeight | 返回自身包括 padding、边框、内容区的高度,返回数值不带单位 |
offset 与 style 区别
- offset
- 可以得到
任意样式表中的样式值
- offset 系列获得的数值是
没有单位的
- offsetWidth 包含
padding + border + width
- offsetWidth 等属性是
只读属性,只能获取不能赋值
- 所以,我们想要获取元素大小位置,用 offset 更合适
- style
- 只能得到
行内样式表中的样式值
- style.width 获得的是
带有单位的字符串
- style.width 获得不包含
padding 和 border 的值
- style.width 是
可读写属性,可以获取也可以赋值
- 所以,我们想要给元素改值,用 style 更合适
元素可视区 client 系列
client 翻译过来就是客户端,我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到该元素的边框大小、元素大小等,
| client 系列属性 | 作用 |
|---|
| element.clientTop | 返回元素上边框的大小 |
| element.clientLeft | 返回元素左边框的大小 |
| element.clientWidth | 返回自身包括 padding、内容区的宽度,不含边框,返回数值不带单位 |
| element.clientHeight | 返回自身包括 padding、内容区的高度,不含边框,返回数值不带单位 |

flexible.js
立即执行函数
- 立即执行函数,不需要调用,立马就能够自己执行的函数
- 写法:第二个小括号可以看做是调用函数
(function(){})()
(function(){}())
- 可以传参
(function(a, b) {
console.log(a + b);
var num = 10;
})(1, 2);
(function sum(a, b) {
console.log(a + b);
var num = 10;
})(2, 3);
- 立即执行函数最大的作用就是
独立创建了一个作用域,里面所有的变量都是局部变量,不会有命名冲突的情况
flexible.js 源码解析截图

pageshow
- 下面三种情况都会刷新页面都会触发 load 事件
- a 标签的超链接
- F5 或者刷新按钮(强制刷新)
- 前进后退按钮
- 但是 火狐 中,有个特点,有个“往返缓存”,这个缓存中不仅保存着页面数据,还保存了 DOM 和 JavaScript 的状态,实际上是将整个页面都保存在了内存里
- 所以此时后退按钮不能刷新页面
- 此时可以使用
pageshow 事件来触发。这个事件在页面显示时触发,无论页面是否来自缓存。在重新加载页面中,pageshow 会在 load 事件触发后,根据事件中的 persisted 来判断是否是缓存中的页面触发的 pageshow 事件,注意这个事件给 window 添加
元素滚动 scroll 系列
- scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等
| scroll 系列属性 | 作用 |
|---|
| element.scrollTop | 返回被卷去的上侧距离,返回数值不带单位 |
| element.scrollLeft | 返回被卷去的左侧距离,返回数值不带单位 |
| element.scrollWidth | 返回自身实际的宽度,不含边框,返回数值不带单位 |
| element.scrollHeight | 返回自身实际的高度,不含边框,返回数值不带单位 |

页面被卷去的头部
- 如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条
- 当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部
- 滚动条在滚动时会触发
onscroll 事件
- 页面被卷去的头部,可以通过
window.pageYOffset 获得,如果是被卷去的左侧则通过 window.pageXOffset 获得
- 注意:元素被卷去的头部是
element.scrollTop,如果是页面被卷去的头部则是window.pageYOffset
三大系列总结
| 三大系列 | 作用 |
|---|
| element.offsetWidth | 返回自身包括 padding、边框、内容区的宽度,返回数值不带单位 |
| element.clientWidth | 返回自身包括 padding、内容区的宽度,不含边框,返回数值不带单位 |
| element.scrollWidth | 返回自身实际的宽度,不含边框,返回数值不带单位 |

主要用法
offset 系列经常用于获得元素的位置:offsetLeft,offsetTop
client 经常用于获取元素大小:clientWidth,clientHeight
scroll 经常用于获取滚动距离:scrollTop,scrollLeft
- 注意页面滚动的距离通过
window.pageXOffset 获得
移动端特效
移动端(touch)触屏事件
- 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方,比如
触屏事件touch(也称触摸事件),Android 和 IOS 都有
- touch 对象代表一个触摸点,触摸点可能是一根手指,也可能是一根触摸笔
- 触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作
常见的触屏事件
| 触屏 touch 事件 | 说明 |
|---|
| touchstart | 手指触摸到一个 DOM 元素时触发 |
| touchmove | 手指在一个 DOM 上滑动时触发 |
| touchend | 手指从一个 DOM 元素上移开时触发 |
触摸事件对象(TouchEvent)
- TouchEvent 是一类描述手指在触摸平面(触摸屏、触摸板)的状态变化的事件。这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等
| 触摸列表 | 说明 |
|---|
| touches | 正在触摸屏幕的所有手指的一个列表 |
| targetTouches | 正在触摸当前 DOM 元素上的手指的一个列表 |
| changedTouches | 手指状态发生了改变的列表,从无到有,从有到无变化 |
classList 属性
classList 属性是 HTML5 新增的一个属性,返回元素的类名。但是 ie10 以上版本才支持。
- 该属性用于在元素中添加、移除以及切换 CSS 类,有以下方法:
-
添加类
element.classList.add('类名')
focus.classList.add('current')
-
移除类
element.classList.remove('类名')
-
切换类
element.classList.toggle('类名')
click 延时解决方案
- 移动端
click 事件会有 300ms 的延时,原因是移动端屏幕双击会缩放(double tap to zoom)页面
解决方案
- 禁用缩放
- 浏览器禁用默认的双击缩放行为并且去掉 300ms 的点击延时
<meta name="vuewport" content="user-scalable=no">
- 利用 touch 事件自己封装这个事件解决 300ms 延迟,原理如下:
- 当我们手指触摸屏幕,记录当前触摸事件
- 当我们手指离开屏幕,用离开的时间减去触摸的时间
- 如果时间小于 150ms,并且没有滑动过屏幕,那么我们就定义为点击
3. 使用插件
- fastclick 插件解决 300ms 延迟
本地存储
- sessionStorage 和 localStorage
| --- | sessionStorage | localStorage |
| --- | --- | --- |
| 容量 | 约 5M | 约 20M |
| 生命周期 | 关闭浏览器窗口就清空 | 永久有效,除非手动删除,否则关闭页面也会存在 |
| 共享 | 在同一个窗口(页面)下数据可以共享 | 可以多窗口(页面)共享(同一浏览器可以共享) |
| 形式 | 键值对 | 键值对 |
| 存储数据 |
sessionStorage.setItem(key, value) | localStorage.setItem(key, value) |
| 获取数据 | sessionStorage.getItem(key) | localStorage.getItem(key) |
| 删除数据 | sessionStorage.removeItem(key) | localStorage.removeItem(key) |
| 删除所有数据 | sessionStorage.clear() | localStorage.clear() |