WebApi笔记
DOM
查找元素的方法
1 | 1.document.getElementById('ID值') |
生词表:
生词 | 翻译 |
---|---|
document | 文档 |
element | 元素 |
node | 节点 |
Attribute | 属性 |
Sibling | 兄弟 |
insert | 插入 |
inner | 内部 |
create | 创造 |
remove | 移除 |
eventTarget | 事件目标 |
toggle | 切换 |
offset | 偏移 |
鼠标事件1:
鼠标事件 | 触发条件 |
---|---|
onclick | 鼠标点击左键触发事件 |
onmouseover | 鼠标经过触发 |
onmouseout | 鼠标离开触发 |
onfocus | 获取鼠标焦点触发(一般用于input) |
onblur | 失去鼠标焦点触发(一般用于input) |
onmousemove | 鼠标移动触发 |
onmouseup | 鼠标弹起触发 |
onmousedown | 鼠标按下触发 |
ondblclick | 鼠标双击触发 |
oncontextmenu | 禁止鼠标右键菜单 |
onselectstart | 禁止鼠标选中 |
语法:
1 | var a = document.querySlector('botton') //获取一个按钮 |
更改元素内容:
1 | element.innerText // 前边的element是元素,需先查找 |
元素操作:
获取、元素属性:
属性直接.出来
获取属性值:
Element.getAttribute(‘自定义属性名’)
设置属性:
Element.setAttribute(‘属性名’,属性值)
H5新增dataset
在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行数据存放 使用data-set可以获取这些数据
1 | <div id='aaa' data-food='皮皮虾'></div> |
设置data属性:
Element.setAttribute(‘属性名’)
直接:
元素.dataset.属性名 = 值
获取data属性
element.dataset.data属性名
删除data属性
delete 元素.dataset.data属性名
创建元素:createElement
var a = document.createElement(‘标签名’)
追加元素(增添元素):
node.appendChild(元素对象)
或 node.appendChild(‘元素标签名’) 添加一个标签
查找元素子节点元素:(查找元素下所有的元素)
返回值为一个装着子元素的伪数组
元素.children
获取到的子节点元素以伪数组的形式保存,可通过下标访问
获取父亲节点:
元素.parentNode
获取下一个兄弟元素:
元素.nextElementSibling
获取上一个兄弟元素:
元素.previousElementSibling
删除子元素:
语法:
父元素.removeChild(实参1)
实参1为元素或则子节点元素
作用:删除这个父元素里的指定子元素
删除元素:
元素.remove()
直接删除当前元素
(伪)数组.remove(数据)
1 | 元素.classList.remove('color') |
在父元素前面添加节点(或元素):
父元素.insertBefore(要添加的元素,添加的位置节点)
事件监听(多使用事件)
addEventListener(‘事件类型’,事件处理程序,false)
参数1:事件类型
参数2:事件处理程序
参数3:控制是否冒泡(布尔型,默认是false,冒泡模式)
1 | // btn为获取的元素 |
注意 : 事件类型不加on
移除监听事件:
元素.removeEventListener(‘事件名’,函数方法)
元素.removeEventListener(‘事件名’,函数方法)
事件函数的形参:event
event.target 可获取一些元素的属性
event.target相当于触发事件的元素
1 | 元素.onclick = function(event){ |
清除事件:
元素.事件 = null
例:
1 | btn.onclick = null |
清除事件监听:
元素.removeEventListener(type, listener[,useCapture]) ;
元素.detachEvent(eventNameWithOn,callback);
阻止标签(元素)默认行为:
1 | 元素.preventDefault() |
兼容ie8的写法:
1 | 元素.returnValue = false |
DOM元素的操作:
对于dom操作,我们主要针对元素的操作.主要有创建、增、删、改、查、属性操作、事件操作.
1.创建 :
- document.write —— 向文档写入数据
- innerHTML —— 写入标签体内容(包括标签和空格和换行)
- innerText —— 写入标签体内容(纯文本,不包含标签和空格和换行)
- createElement —— 创建一个元素
2.增加 :
- appendChild —— 添加一个子元素
- insertBefore —— 在元素之前添加一个元素(兄弟元素)
3.删除 :
- removeChild —— 删除元素的子元素
- remove() —— 删除当前元素,括号里可以写冒号里边写删除目标的名字
4.修改 :
主要修改dom的元素属性,dom元素的内容、属性,表单的值等
- 修改元素属性 : src 、 href 、 title 、 checked等
- 修改普通元素内容 : innerHTML 、 innerText
- 修改表单元素 : value 、 type 、 disabled 等
- 修改元素样式 : style 、 className
5.查询 :
主要获取查询dom的元素
- DOM提供的API方法 : getElementById 、 getElementsByTagName 古老用法 不推荐
- H5提供的新方法 : querySelector 、 querySelectorAll 提倡
6.属性操作:
主要针对自定属性
- setAttribute : 设置dom元素的属性值
- getAttribute : 获得dom元素的属性值
- removeAttribute 移除元素属性
事件高级:
注册事件有两种方式
1.普通事件绑定:
2.事件监听:
addEventListener()事件监听 (IE9以后支持)
eventTarget.addEventListener(参数1,参数2,参数3)
方法将制定的监听器注册到eventTarget(目标对象)上,对该对象触发指定的事件时,就会处理处理函数。
阻止事件冒泡:
StopPropagetion()
1 | let btn = document.querySelector('button') |
阻止a标签的跳转功能:
1 | <a href="javascript:void(0);" |
鼠标事件2:
鼠标事件对象 | 说明 |
---|---|
e.clientX | 返回鼠标相对于浏览器窗口可视区的X坐标 |
e.clientY | 返回鼠标相对于浏览器窗口可视区的Y坐标 |
e.pageX | 返回鼠相对于文档页面的X坐标ie9+支持 |
e.pageY | 返回鼠相对于文档页面的Y坐标ie9+支持 |
e.screenX | 返回鼠标相对于电脑屏幕的X坐标 |
e.screenY | 返回鼠标相对于电脑屏幕的Y坐标 |
禁止鼠标右键菜单:
contextmenu (事件)
作用:控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单
1 | Element.addEventListener('contextmenu',function(event){ |
禁止鼠标选中: (selectstart)
selectstart (事件)
1 | addEventListener('selectstart',function(event){ |
键盘事件:
键盘事件 | 触发 |
---|---|
Keydown | 键盘按下的时候 |
Keypress | 键盘按下时(不能识别功能键) |
keyup | 键盘弹起的时候 |
keydown键盘按下事件:
通过事件监听设置键盘按下事件
作用:通过键盘按下实现某些功能
1 | document.addEventListener('keydown',function(event){ |
Keypress键盘输入事件:
通过事件监听设置键盘输入事件
作用:通过键盘按下实现某些功能
1 | document.addEventListener('keypress',function(event){ |
keyup键盘弹起事件:
通过事件监听设置键盘弹起事件
作用:通过键盘弹起实现某些功能
1 | document.addEventListener('keyup',function(event){ |
在页面中按下键盘任意键 弹起 的时候在控制台输出333
ASCII表:
字母键ASCII表:
按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
---|---|---|---|---|---|
A | 65 | J | 74 | S | 83 |
B | 66 | K | 75 | T | 84 |
C | 67 | L | 76 | U | 85 |
D | 68 | M | 77 | V | 86 |
E | 69 | N | 78 | W | 87 |
F | 70 | O | 79 | X | 88 |
G | 71 | P | 80 | Y | 89 |
H | 72 | Q | 81 | Z | 90 |
I | 73 | R | 82 |
数字键上的ASCII码:
按键 | 键码 | 按键 | 键码 |
---|---|---|---|
1 | 49 | 6 | 54 |
2 | 50 | 7 | 55 |
3 | 51 | 8 | 56 |
4 | 52 | 9 | 57 |
5 | 53 |
数字键盘上的键ASCII表:
按键 | 键码 | 按键 | 键码 |
---|---|---|---|
0 | 96 | 8 | 104 |
1 | 97 | 9 | 105 |
2 | 98 | * | 106 |
3 | 99 | + | 107 |
4 | 100 | Enter | 108 |
5 | 101 | - | 109 |
6 | 102 | . | 110 |
7 | 103 | / | 111 |
功能键ASCII表:
按键 | 键码 | 按键 | 键码 |
---|---|---|---|
F1 | 112 | F7 | 118 |
F2 | 113 | F8 | 119 |
F3 | 114 | F9 | 120 |
F4 | 115 | F10 | 121 |
F5 | 116 | F11 | 122 |
F6 | 117 | F12 | 123 |
键盘事件执行顺序:
keydown > keypress > keyup
键盘事件区别:
keydown 和 keyup 不能识别键盘大小写,keypress可以识别
keydown 和 keyup 能识别键盘的功能键,keypress不能识别功能键
属性key(键盘键名):
作用:获取键盘输入的东西
通过事件监听的event形参.key 可获得输入的键盘键名,配合 key事件 使用
1 | document.addEventListener('keydown',function(event){ |
属性keyCode(键盘按下输出对应的ASCII码):
作用:获取键盘输入的键对应的ASCII码
通过事件监听的event形参.key 可获得输入的键盘键名,配合 key事件 使用
1 | document.addEventListener('keydown',function(event){ |
元素的offset属性(offset系列)
概述:offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态的得到该元素的位置(偏移量)、大小等.
- 获得元素距离带有定位父元素的位置
- 获得元素自身的大小(宽度高度)
- 注意:返回的数值都不带单位
offset系列属性 | 作用 |
---|---|
Element.offsetParent | 返回作为该元素带有定位的父级元素,如果父级都没有定位则返回body(返回距离当前元素最近的带有定位的父级元素) |
element.offsetTop | 返回元素相对于 带有定位的父级元素 上方的偏移 |
element.offsetLeft | 返回元素相对于 带有定位的父级元素 左边的偏移 |
Element.offsetWidth | 返回自身包括padding、边框、内容区的宽度、返回数值不带单位(只读属性) |
element.offsetHeight | 返回自身包括padding、边框、内容区的高度、返回数值不带单位 |
offset 与 style 区别
offset
offset 可以得到任意样式表中的样式值
offset 系列获得的数值是没有单位的
offsetWidth 包含padding+border+width
offsetWidth 等属性是只读属性,只能获取不能赋值
所以,我们想要获取元素大小位置,用offset更合适
style
style 只能得到行内样式表中的样式值
style.width 获得的是带有单位的字符串
style.width 获得不包含padding和border 的值
style.width 是可读写属性,可以获取也可以赋值
所以,我们想要给元素更改值,则需要用style改变
因为平时我们都是给元素注册触摸事件,所以重点记住 targetTocuhes
获取鼠标在盒子内的坐标
利用鼠标距离页面的距离和元素距离页面的距离
下拉框的change事件 (发生改变触发事件)
通过改变下拉框的选项改变,触发事件
下拉框的selectIndex属性(可读可写)
实际返回值是select选项(option)中选中的下标
let select = document.querySelector(‘select’)
获取到下拉框后
console.log(select.selectIndex)
可打印下标值
BOM
window事件:
window事件 | 触发 |
---|---|
load | 当页面加载完后触发 |
DOMContentLoaded | 当DOM加载完后触发(不包括css,图片等) |
resize | 当前浏览器窗口大小发生变化时触发 |
页面(窗口)加载事件1:(load事件)
load事件:等待所有的dom元素 图片 css 等全部加载完毕之后再来执行load的处理程序
一般情况是写在body标签前面,因为会等body里面的东西加载完后执行load的处理程序
作用:等页面渲染完后在执行javasrcipt代码,防止页面加载时间过长,加快页面渲染速度
语法:(需要用到事件监听,或普通的绑定事件)
1 | // 事件监听 |
1 | // 普通事件绑定 |
页面(窗口)加载事件2:(DOMContentLoaded事件)
DOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。
语法:与load事件已致(上一条)
如果页面的图片很多的话,从用户访问到onload触发可能需要较长的时间,交互效果就不能实现,必然影响用户体验,此时DOMContentLoaded事件比较合适
注意:IE9以上才支持!
调整窗口大小事件(window.onresize):
resize是调整窗口大小时加载事件,当触发时就调用的处理函数
语法:
1 | //1.普通事件注册 |
注意:只要窗口大小发生像素变化,就会触发这个事件
window.innerWidth —— 当前浏览器窗口宽度
定时器:(回调函数)
回调函数:
简单理解:回调,就是回头调用的意思。上一件事干完,再回头调用这个函数。
例如:定时器中的调用函数,事件处理函数,也是回调函数
设置定时器setInterval:(window.setInterval)
作用:定时器
语法:
1 | window.setInterval(function(){ |
设置倒计时定时器setTimeout:(window.setTimeout)
作用:倒计时执行代码
语法:
1 | window.setTimeout(function(){ |
清除定时器clearInterval:(window.clearInterval)
作用:清除 “ 定时器 “
前提:需设定定时器的标识符(tiemid,名字可以随机),tiemid为定时器存储的唯一标识
语法:
1 | let tiemid = window.setInterval(function(){ |
同步和异步:
console.log() 和 定时器
console.log(‘我是同步代码从上往下执行’)
定时器为异步代码,后执行
同步加载,阻塞模式,会阻止浏览器的后续处理
异步加载,不会阻塞同步代码的加载
大白话:console.log(同步代码)先执行,定时器(异步代码)后执行
window下的对象
location对象的属性
window对象给我们提供了一个location属性用于获取或设置窗体的URL,并可以用于解析URL . 因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象.
URL地址:”https://“
location对象属性 | 返回值 |
---|---|
location.href | 获取或者设置 整个URL(地址) |
location.host | 返回主机(域名) www.baidu.com |
location.port | 返回端口号 如果未写,返回空字符串 |
location.pathname | 设置、返回路径部分(域名地址/后面的内容) |
location.search | 返回参数(?后面的东西) |
location.hash | 返回片段 #后面内容 常见于链接 锚点 |
location对象的方法
location对象的方法 | 返回值 |
---|---|
location.assign(newURL) | 跟href一样,可以跳转页面(也称为重定向页面) |
location.replace(newURL) | 替换当前页面,因为不记录历史,所以不能后退页面 |
location.reload() | 重新加载页面,相当于刷新按钮或者f5,若果参数为true为强制刷新(清除缓存) |
navigator对象
navigator 对象包含有关浏览器的信息,它有很多属性,我们最常用的是 userAgent,该属性可以返回由客户机发送服务器的 user-agent 头部的值。
1 | console.log(navigator.userAgent) |
下面前端代码可以判断用户那个终端打开页面,实现跳转
1 | if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) { |
history对象
window对象给我们提供了一个 history对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的URL。
history对象方法 | 作用 |
---|---|
back() | 可以后退功能 |
forward() | 前进功能 |
go(参数) | 前进后退功能 参数如果是1前进1个页面 如果是-1 后退1个页面 |
元素偏移量offset系列
offset概述
offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等.
- 获得元素距离 带有定位父元素 的位置.
- 获得元素自身的大小(宽度高度)
- 注意 : 返回的数值都不带单位
offset系列属性 | 作用 |
---|---|
element.offsetParent | 返回作为该元素带有定位的父级元素,如果父级都没有定位则返回body |
element.offsetTop | 返回距离元素最近的设置了定位的父级元素的上边距离 |
element.offsetLeft | 返回距离元素最近的设置了定位的父级元素的左边距离 |
element.offsetWidth | 返回元素的宽度,包括padding,border内容区的区域,不带单位 |
element.offsetHeight | 返回元素的高度,包括padding,border内容区的区域,不带单位 |
element.offsetX | 鼠标在元素里的X坐标 |
element.offsetY | 鼠标在元素里的Y坐标 |
offset 与 style 区别
offset
offset 可以得到任意样式表中的样式值
offset 系列获得的数值是没有单位的
offsetWidth 包含padding+border+width
offsetWidth 等属性是只读属性,只能获取不能赋值
所以,我们想要获取元素大小位置,用offset更合适
style
style 只能得到行内样式表中的样式值
style.width 获得的是带有单位的字符串
style.width 获得不包含padding和border 的值
style.width 是可读写属性,可以获取也可以赋值
所以,我们想要给元素更改值,则需要用style改变
因为平时我们都是给元素注册触摸事件,所以重点记住 targetTocuhes
获取鼠标在盒子内的坐标
利用鼠标距离页面的距离(pageX/Y) 和 盒子与页面的距离(box.offsetLeft/Top)
鼠标与页面的距离 - 盒子与页面的距离 = 鼠标在盒子内的坐标
通过事件监听盒子
1 | var box = document.querySelector('.box'); |
元素的可视区CLIENT系列
client概述
client翻译过来是客户端 , 我们使用client系列的相关属性来获取元素可视区的相关信息.通过client系列的相关属性可以动态的得到该元素的管框大小,元素大小等…..
client系列属性 | 作用 |
---|---|
element.clientTop | 返回元素上边框的大小 |
element.clientLeft | 返回元素左边框的大小 |
element.clientWidth | 返回自身包括padding、内容区的宽度、不含边框、返回数值不带单位 |
element.clientHeight | 返回自身包括padding、内容区的高度、不含边框、返回数值不带单位 |
元素滚动SCROLL系列
scroll事件:
window或者元素滚动时触发事件
scroll概述:
scroll翻译过来就是滚动的意思 , 使用scroll系列相关属性可以动态的得到该元素的大小、滚动距离等…..
scroll系列属性 | 作用 |
---|---|
element.scrollTop | 返回被卷去的上侧距离,返回数值不带单位 |
element.scrollLeft | 返回被卷去的左侧距离,返回数值不带单位 |
element.scrollWidth | 返回自身内容的实际宽度,不含边框,返回数值不带单位 |
element.scrollHeight | 返回自身内容的实际高度,不含边框,返回数值不带单位 |
window下的pageXOffset和pageYOffset属性
pageXOffset 文档(页面)被卷入的宽度
pageYOffset 文档(页面)被卷入的高度
1 | document.onscroll = function(){ |
本地存储
1、数据存储在用户浏览器中
2、设置、读取方便甚至刷新不丢失数据
3、容量较大 , sessionStorage约5M、localStorage约20M
4、只能存储字符串 , 可以将对象JSON.stringify()编码后存储
5、可以通过JSON.parse()转码后访问
window.sessionStorage窗口缓存数据
1、生命周期为关闭浏览器窗口
2、在同一个窗口(页面)下数据可以共享
3、以键值对的形式存储使用
存储数据 :
1 | sessionStorage.setItem(key,value) |
获取数据 :
1 | sessionStorage.getItem(key) |
删除数据 :
1 | sessionStorage.removeItem(key) |
清空数据 : (清空所有数据)
1 | sessionStorage.clear() |
key 键名 , value 值
Window.localStorage电脑缓存
1、声明周期永久生效 , 除非手动删除 否则关闭页面也会存在
2、可多窗口(页面)共享(统一浏览器可以共享)
3、以键值对的形式存储使用
存储数据 :
1 | localStorage.setItem(key,value) |
获取数据 :
1 | localStorage.getItem(key) |
删除数据 :
1 | localStorage.removeItem(key) |
清空数据 : (清空所有数据)
1 | localStorage.clear() |
JSON.stringify(obj)
将对象转化为字符串对象
JSON.parse(obj)
将字符串转成js对象