JavaScript的Webapi
前言
Api:应用程序接口,开发的工具;
本文介绍JavaScript在浏览器的Webapi,记录了自己的学习过程。
DOM文档对象模型
获取元素
1 | document.getElementById('id') // id获取,返回的是元素对象,没有为null |
事件基础
- 一些常见的鼠标事件

- 其他事件
| ondblclick | 鼠标双击 |
|---|---|
| onchange | 文本内容或下拉菜单中的选项发生改变 |
| onload | 网页文档加载事件 |
| onunload | 关闭网页时 |
| onsubmit | 表单提交事件 |
| onreset | 重置表单时 |
- 属性操作
可以不用事件直接更改
1 | // 从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉 |
其他的标签属性:src、href 、id、alt、title
表单元素的属性操作
type、value、checked、selected、disabled
样式属性操作
element.style 行内样式操作 、element.className 类名样式操作
1 | // 自定义属性 |
节点操作
| 方法 | 意义 |
|---|---|
| children | 子元素节点,不包含换行等 |
| childNodes | 子节点,包含文本、换行等 |
| parentNode | 父节点,注意是单数 |
| previousSibling | 前一个同辈节点,包括文本节点、注释节点即回车、换行、空格、文本等 |
| previousElementSibling | 前一个同辈节点,不包括文本节点、注释节点 |
| nextSibling | 后一个同辈节点,包括文本节点、注释节点即回车、换行、空格、文本等 |
| nextElementSibling | 后一个同辈节点,不包括文本节点、注释节点等 |
| firstChild | 第一个子节点,包含文本 |
| firstElementChild | 第一个子节点,不包含文本 |
| lastChild | 最后一个子节点,包含文本 |
| lastElementChild | 最后一个子节点,不包含文本 |
创建节点
| 方法 | 意义 |
|---|---|
| appendChild() | 在最后面追加 |
| insertBefore() | 参数 1: 要插入的节点 参数 2: 作为参照的节点,如果为 null,与 appendChild 效果相同 |
| replaceChild() | 替换节点 参数 1: 要插入的节点 参数 2: 要替换的节点 |
| removeChild() | 移除节点 参数: 要移除的节点 |
| cloneNode() | 复制节点 参数(可选):true,克隆时包含子元素 |
| createElement | 创建元素节点 |
|---|---|
| createTextNode | 创建文本节点 |
1 | // 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘 |
注册事件
注册事件有两种方式:传统方式和方法监听注册方式
1 | // 传统方式,利用 on 开头的事件onclick |
删除事件
1 | // 传统方式 |
Dom事件流
事件发生时会在元素节点之间按照特定的顺序传播,事件的传播过程就是DOM事件流;
三个阶段:捕获阶段(从上往下或者从父到子) 、当前目标阶段 (触发事件)、冒泡阶段(从子到父)
注意:
JS 代码中只能执行捕获或者冒泡其中的一个阶段。
onclick 和 attachEvent 只能得到冒泡阶段。
addEventListener(type, listener[, useCapture])第三个参数如果是 true,表示在事件捕获阶段调用事件处理程序;如果是 false(不写默认就是false),表示在事件冒泡阶段调用事件处理程序。
有些事件是没有冒泡的,比如 onblur、onfocus、onmouseenter、onmouseleave
事件对象
1 | // event对象代表事件的状态,比如键盘按键的状态、鼠标的位置、鼠标按钮的状态。 |
事件对象属性方法

1 | // this和event.target的区别 |
阻止默认事件
1 | // 传统方式 |
阻止事件冒泡
1 | // 标准写法:利用事件对象里面的 stopPropagation()方法 |
事件委托
1 | // 原理:事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。 |
常用的鼠标事件
1 | // 禁止鼠标右键菜单 |
鼠标事件对象

1 | // e.clientX,e.clientY的值是可视区域,不管页面是否有滚动条 |
常用的键盘事件

三个事件的执行顺序是: keydown – keypress — keyup,一直按着会一直触发keydown和keypress
键盘事件对象
1 | document.onkeyup = function (e) { |
BOM浏览器对象模型
BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心 对象是 window。
注意:不要使用name作为变量,name是属于window的属性

window对象常见的事件
1 | // 加载事件,script可以放在任何位置,页面加载完 |
定时器
1 | // setTimeout(延迟执行),调用不要写f(),否者直接调用 |
this的指向
全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
方法调用中谁调用this指向谁
构造函数中this指向构造函数的实例
JS执行队列
1 | // 输出结果是1 2 3,定时器里的回调函数属于异步 |
location 对象


1 | // location属性 |
navigator对象
navigator 对象包含有关浏览器的信息,常用的是userAgent返回由客 户机发送服务器的user-agent头部的值;可以查看是pc还是移动端实现加载不同页面;
history 对象

1 | history.forward() // 前进 |
网页特效与其他
元素偏移量 offset

1 | // 获得元素距离带有定位父元素的位置 |
offset与style的区别
style 只能得到行内样式表中的样式值,style标签里的获取不到;
style.width获得的是带有单位的字符串 ,不包含padding和border的值 ,可以赋值;
offsetWidth只能获取不能赋值;(其他的属性也不能如offsetLeft)
元素可视区client

注意:和offsetWidth的区别,clientWidth不包含边框
立即执行函数
1 | // 立即执行函数: 不需要调用,立马能够自己执行的函数 |
1 | // 物理像素比,pc是1,而手机则是2或者其他 |
元素滚动scroll

1 | // scrollHeight和clientHeight差不多 |
鼠标事件一些区别
onmouseover、nmouseout:鼠标移动到自身时候会触发事件,同时移动到其子元素身上也会触发事件
onmouseenter、onmouseleave:鼠标移动到自身是会触发事件,但是移动到其子元素身上不会触发事件
动画
注意:定时器可以赋值某个对象的属性,可以节约内存资源,不需要使用字符串;
封装的动画函数中,回调函数是在动画结束后再触发;
1 | function animate(obj, target, callback) { |
1 | // 自动调用点击 |
移动端网页特效

触摸事件对象

1 | // 示例 |