Web API

一、API

接口(预定义的函数),简单理解为给程序员提供的一个工具,以便实现想要的功能

二、Web API

浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM)

三、DOM文档对象模型

1、DOM

  • 编程接口

2、DOM树

  • 文档:一个页面就是一个文档,DOM中使用document表示

  • 元素:页面中所有标签都是元素,DOM中使用element表示

  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM中使用node表示

3、获取元素

//(1)根据id获取,返回带有id的元素对象
document.getElementById('id');
//(2)根据标签名获取,返回带有指定标签名的对象的集合,是一个伪元素
document.getElementsByTagName('标签名');
//(3)通过HTML5新增的方法获取
//querySelector() 返回指定选择器的第一个元素对象
document.querySelector('.类名');
document.querySelector('#id名');
//querySelectorAll()返回指定选择器的所有元素对象集合
document.querySelectorAll('.类名');
//(4)特殊元素获取
//获取body 元素
varbodyEle=document.body;
//获取html 元素
varhtmlEle=document.html;
varhtmlEle=document.documentElement;

4、事件基础

4.1、事件概述:触发---响应机制

4.2、事件三要素

事件源(谁做)、事件类型(什么事件)、事件处理程序(做什么)

4.3、执行事件的步骤

获取事件源---注册事件---添加事件处理程序

4.4、鼠标事件

鼠标事件

触发条件

onclick

鼠标点击左键触发

onmouseover

鼠标经过触发

onmouseout

鼠标离开触发

onfocus

获得鼠标焦点触发

onblur

失去鼠标焦点触发

onmousemove

鼠标移动触发

onmouseup

鼠标弹起触发

onmousedown

鼠标按下触发

mouseenter和mouseover的区别

  • mouseenter不会冒泡

5、操作元素

5.1、改变元素内容

element.innerText

element.innerHTML

innerText 和 innerHTML的区别

  • innerText 不识别html标签 非标准 去除空格和换行

  • innerHTML 识别html标签 W3C标准 保留空格和换行的

  • 这两个属性是可读写的 可以获取元素里面的内容

5.2、常见元素属性

src、href、id、alt、title

5.3、表单属性操作

// 2. 注册事件 处理程序
btn.onclick=function() {
// input.innerHTML = '点击了';  这个是 普通盒子 比如 div 标签里面的内容
// 表单里面的值 文字内容是通过 value 来修改的
input.value='被点击了';
// 如果想要某个表单被禁用 不能再点击 disabled  这个按钮 button禁用
// btn.disabled = true;
this.disabled=true;
// this 指向的是事件函数的调用者 btn

5.4、样式属性操作

1.element.style.backgroundColor="red"   //js操作样式
2.element.className="bg"   // 类名样式操作
  • JS 里面的样式采取驼峰命名法 。比如 fontSize、 backgroundColor

  • JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高

  • css的属性值要加引号

5.5、排他思想

// 1. 获取所有按钮元素
varbtns=document.getElementsByTagName('button');
// btns得到的是伪数组  里面的每一个元素 btns[i]
for (vari=0; i<btns.length; i++) {
   btns[i].onclick=function() {
   // (1) 我们先把所有的按钮背景颜色去掉  干掉所有人
        // for (var i = 0; i < btns.length; i++) {
        //     btns[i].style.backgroundColor = '';
        // }
    console.log(i);
        for(varj=0;j<btns.length;j++){
            console.log(j);
            btns[j].style.backgroundColor='';
        }
// (2) 然后才让当前的元素背景颜色为pink 留下我自己
        this.style.backgroundColor='pink';
   }
}
//2. 首先先排除其他人,然后才设置自己的样式 这种排除其他人的思想我们成为排他思想

5.6、自定义属性操作

element.属性  // 获取标签行内属性值(元素本身自带的属性)
element.getAttribute('属性');      // 获取标签行内属性值(自定义的属性)
element.属性='属性值'  // 设置标签行内属性值
div.className='nav'  //设置类名(特殊)
element.setAttribute('属性', '属性值'); // 设置标签行内属性值
div.setAttribute('class','nav') //设置类名
element.removeAttribute('属性');    // 移除标签行内属性
​
<divgetTime="20"data-index="2"data-list-name="andy"></div>
// h5新增的获取自定义属性的方法 它只能获取data-开头的
// dataset 是一个集合里面存放了所有以data开头的自定义属性
console.log(div.dataset['listName']);
  • 一般情况下,使用element.属性 获取内置属性;element.getAttribute('属性') 获取自定义属性

  • 自定义属性一般以data-开头

  • 如果自定义属性里面有多个-链接的单词,我们获取的时候采取 驼峰命名法

6、节点操作

6.1、概述

  • 元素节点 nodeType 为 1(重点)

  • 属性节点 nodeType 为 2(了解)

  • 文本节点 nodeType 为 3(了解)

6.2、获取元素节点

// 利用 DOM 方法获取元素节点
document.getElementById() 
document.getElementByTagName()
// 利用父级节点关系获取元素(亲爸爸)  如果指定的节点没有父节点则返回 null 
​
node.parentNode  
// 利用子节点关系获取元素
parentNode.children//只读属性,返回所有的子元素节点(不包括空格和换行)
parentNode.children[0] //返回第一个子节点(常用)
parentNode.chilren[parentNode.chilren.length-1] //返回最后一个子元素节点
parentNode.firstChild//返回第一个子节点,找不到则返回null。同样,也是包含所有的节点。(了解)
parentNode.lastChild  //返回最后一个子节点,找不到则返回null(了解)
node.nextSibling//返回当前元素的下一个兄弟元素节点,找不到则返回null。
node.previousSibling    //返回当前元素上一个兄弟元素节点,找不到则返回null。

6.3、创建节点

document.createElement('tagName')

6.4、添加节点

node.appendChild(child) //将一个节点添加到指定父节点的子节点列表末尾
node.insertBefore(child) //将一个节点添加到指定父节点的子节点列表前面

6.5、删除节点

node.removeChild(child) //从 DOM 中删除一个子节点,返回删除的节点

6.6、复制节点

node.cloneNode() //返回调用该方法的节点的一个副本
  • 如果括号参数为空或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。

  • 如果括号参数为 true ,则是深度拷贝,会复制节点本身以及里面所有的子节点。

6.7、替换节点

parentNode.replaceChild(newChild, oldChild); //用指定的节点替换当前节点的一个子节点,并返回被替换掉的节点。

6.8、创建元素

//innerHTML 创建元素
//采用字符串拼接创建元素
// var inner = document.querySelector('.inner');
// for (var i = 0; i <= 100; i++) {
       //inner.innerHTML += '<a href="#">百度</a>'
//}
//采用数组形式拼接创建元素
vararr= [];
for (vari=0; i<=100; i++) {
  arr.push('<a href="#">百度</a>');
}
inner.innerHTML=arr.join('');
  • document.write() 创建元素 如果页面文档流加载完毕,再调用这句话会导致页面重绘(了解)

  • innerHTML 是将内容写入某个 DOM 节点,不会导致页面全部重绘

  • innerHTML 复制节点的时候,不会复制原先节点的事件,会存在内存泄露问题

  • 如果页面创建元素很多,建议使用 innerHTML 因其效率更高(不要拼接字符串,采取数组形式拼接)

  • 如果页面创建元素较少,建议使用 createElement()

四、事件高级

1、注册事件(绑定事件)

(1)利用on开头的事件,如onclick

注册事件的唯一性

同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数

(2)addEventListener('事件类型','事件处理函数')

它是一个方法,事件类型不需要加on,同一个元素同一个事件可以注册多个监听器,按注册顺序依次执行

2、删除事件

removeEventListener()

3、DOM事件流

3.1、概述

  • 事件流描述的是从页面中接收事件的顺序。

  • 事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。

3.2、阶段

  • 捕获阶段

  • 当前目标阶段

  • 冒泡阶段

注意:onblur、onfocus、onmouseenter、onmouseleave没有冒泡

  • onclick 和 attachEvent(ie) 只能得到冒泡阶段。

  • 捕获阶段 如果addEventListener 第三个参数是 true 那么则处于捕获阶段 document -> html -> body -> father -> son

  • 冒泡阶段 如果addEventListener 第三个参数是 false 或者 省略 那么则处于冒泡阶段 son -> father ->body -> html -> document

  • 当 son 定位到其他位置,给父亲绑定事件,点击son,父亲也会被触发,在dom中son还是在父亲节点里面的

4、事件对象

4.1、概述

  • 事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象 event,它有很多属性和方法。

  • 这个 event 是个形参,系统帮我们设定为事件对象,不需要传递实参过去。

  • 这个事件对象我们可以自己命名 比如 event 、 evt、 e

  • 当我们注册事件时, event 对象就会被系统自动创建,并依次传递给事件监听器(事件处理函数)。

4.2、事件对象属性和方法

事件对象属性方法

说明

e.target

返回触发事件的对象

e.type

返回事件的类型

e.stopPropagation()

阻止冒泡

e.preventDefault()

阻止默认事件(默认行为)

e.keyCode

拿到相应键的ASCLL码值

e.target 返回的是触发事件的对象(元素) this 返回的是绑定事件的对象(元素)

区别 :
  • e.target :点击了那个元素,就返回那个元素 ;this: 那个元素绑定了这个点击事件,那么就返回谁

  • currentTarget 和 this 非常相似

5、阻止事件冒泡

e.stopPropagation()

6、事件委托

6.1、原理

  • 给父元素绑定事件,然后通过事件冒泡的原理,从而影响子元素,这样可以提高性能

7、鼠标事件

7.1、禁止鼠标右键菜单contextmenu主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单

document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
})

7.2、禁止鼠标选中(selectstart 开始选中)

document.addEventListener('selectstart', function(e) {
    e.preventDefault();
   })

7.3、鼠标事件对象

鼠标事件对象

说明

e.clientX

返回鼠标相对于浏览器窗口可视区的X坐标

e.clientY

返回鼠标相对于浏览器窗口可视区的Y坐标

e.pageX

返回鼠标相对于文档页面的X坐标

e.pageY

返回鼠标相对于文档页面的Y坐标

e.screenX

返回鼠标相对于电脑屏幕的X坐标

e.screenY

返回鼠标相对于电脑屏幕的Y坐标

8、键盘事件

8.1、键盘事件(给document添加键盘事件)

键盘事件

触发条件

onkeyup

松开键时

onkeydown

按下键时

onkeypress

按下并弹起时

  • onkeyperss不识别功能键

  • 执行顺序:keydown -- keypress -- keyup

  • 文本框中的内容是在按下之后才出来,所以在 keyup 的时候才能获取到输入的内容

8.2、键盘事件对象

  • keyCode返回该键的ASCLL值

  • 注意: onkeydown 和 onkeyup 不区分字母大小写,onkeypress 区分字母大小写。

五、BOM

1、概念

  • 浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。

  • BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。

  • BOM 缺乏标准,JavaScript 语法的标准化组织是 ECMA,DOM 的标准化组织是 W3C,BOM 最初是Netscape 浏览器标准的一部分。

2、DOM和BOM的区别

  • DOM文档对象模型 DOM 就是把「文档」当做一个「对象」来看待DOM 的顶级对象是 documentDOM 主要学习的是操作页面元素DOM 是 W3C 标准规范

  • BOM浏览器对象模型把「浏览器」当做一个「对象」来看待BOM 的顶级对象是 windowBOM 学习的是浏览器窗口交互的一些对象BOM 是浏览器厂商在各自浏览器上定义的,兼容性较差

  • BOM包含DOM

3、BOM构成

  • window 对象是浏览器的顶级对象,它具有双重角色。

  • 它是 JS 访问浏览器窗口的一个接口。

  • 它是一个全局对象。定义在全局作用域中的变量、函数都会变成 window 对象的属性和方法。

  • 在调用的时候可以省略 window,前面学习的对话框都属于 window 对象方法,如 alert()、prompt() 等。

  • 注意:window下的一个特殊属性 window.name

4、窗口加载事件

//如果写多个onload,前面的会被后面的覆盖
window.onload=function(){} 
//不加 on ,可以注册多个,不会被覆盖
window.addEventListener("load",function(){});
​
document.addEventListener('DOMContentLoaded',function(){})
  • load :等页面内容全部加载完毕,包含页面dom元素 图片 flash css 等等

  • DOMContentLoaded :DOM 加载完毕,不包含图片 falsh css 等就可以执行 加载速度比 load更快一些

5、调整窗口大小

window.onresize=function(){}
​
window.addEventListener("resize",function(){});
window.onresize 是调整浏览器窗口大小加载事件,  当触发时就调用的处理函数

注意:

  • 只要浏览器窗口大小发生像素变化,就会触发这个事件。

  • 我们经常利用这个事件完成响应式布局。

  • rem原理:document.documentElement.style.fontSize = innerWidth / 10 + "px"

  • window.innerWidth 当前屏幕的宽度

6、定时器

6.1、setTimeout

window.setTimeout(回调函数, [延迟的毫秒数]);
setTimeout() 设置定时器,只触发一次,当经过一段时间后,自动调用里面的函数

注意:

  • window 可以省略

  • 这个回调函数可以直接写 函数,或者写 函数名 或者 采取字符串 ‘函数名()' (不推荐)

  • 延迟的毫秒数省略默认是 0,如果写,必须是毫秒

  • 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符

6.2、停止setTimeout() 定时器

window.clearTimeout(定时器名)

6.3、setInterval()

window.setInterval(回调函数, [间隔的毫秒数]);
  • setInterval() 方法重复调用一个函数,每隔这个时间,就去调用一次回调函数。

  • 第一次执行也是间隔毫秒数之后执行,之后每隔毫秒数就执行一次。

  • 因为定时器第一次执行也需要等间隔时间,所以将函数封装起来,先调用一次,防止第一次刷新页面有空白

6.4、停止 setInterval() 定时器

window.clearInterval(定时器名);
  • clearInterval()方法取消了先前通过调用 setInterval()建立的定时器。

7、this指向

  • 全局作用域或者普通函数中this指向全局对象window

  • 定时器里面的this指向window

  • 事件处理函数中谁调用this指向谁

  • 构造函数中this指向构造函数的实例

8、JS执行机制

8.1、JS是单线程

  • js 在执行代码的时候是顺序执行的,一次只能做一件事

8.2、同步和异步

  • 同步是当前一个任务执行完毕后再执行下一个

  • 异步是同时执行所有的任务

8.3、同步任务

同步任务在主线程中执行,形成一个执行栈

8.4、异步任务

  • 异步任务先被放到任务队列中,等待主线程中的同步任务执行完毕,再读取任务队列中的回调函数执行

  • 异步任务包括回调函数、定时器

9、location对象

9.1、概念

  • window 对象给我们提供了一个 location 属性用于获取或设置窗体的 URL,并且可以用于解析 URL 。 因为这个属性返回的是一个对象,所以我们将这个属性也称为 location 对象。

9.2、URL的一般语法格式

protocol://host[:port]/path/[?query]#fragment

http://www.itcast.cn/index.html?name=andy&age=18#link

组成

说明

protocol

通信协议

host

主机(域名)

port

端口号

path

路径

query

参数,以键值对的形式通过&分割

fragment

片段,#后常写链接锚点

9.3、location对象属性

属性

返回值

location.href

获取或设置整个URL

location.search

返回 ? 后面的参数

location.host

返回主机

location.port

返回端口号,未写返回空字符串

location.pathname

返回路径

location.hash

返回片段

9.4、location对象方法

对象方法

返回值

location.assign()

与href一样,可以跳转页面

location.replace()

替换当前页面,不记录历史

location.reload()

重新加载页面,参数为true强制刷新

10、navigator对象

navigator 对象包含有关浏览器的信息,它有很多属性,我们最常用的是 userAgent,该属性可以返回由客户机发送服务器的 user-agent 头部的值。

10、 history 对象

window 对象给我们提供了一个 history 对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的 URL。

对象方法

作用

back()

后退

forward()

前进

go(参数)

1前进,-1后退

11、offset

11.1、概述

属性

作用

element.offsetParent

返回该元素带有定位的父元素,如果没有则返回body

element.offsetTop

返回元素相对带有定位的父元素上方的偏移

element.offsetLeft

返回元素相对带有定位的父元素左边的偏移

element.offsetWidth

返回padding+border+width

element.offsetHeight

返回padding+border+height

  • element.parentNode返回亲爸爸

  • 返回的数值没有单位

11.2、offset与style的区别

offset系列

  • 只读属性,不可以赋值,只能获取

  • 可以得到任意样式表中的样式值

  • 获得的数值是没有单位的

  • offsetWidth = padding + border + width

style

  • 是可读可写属性,可以获取也可以赋值

  • 只能得到行内样式表中的样式值

  • style.width获得的是带有单位的字符串

  • style.width = width

12、client

属性

作用

element.clientTop

返回元素上边框大小

element.clientLeft

返回元素左边框大小

element.clientWidth

返回padding+width,不带单位

element.clientHeight

返回padding+height,不带单位

13、立即执行函数

13.1、语法

(function(形参){})(实参);
(function(形参){}(实参));

13.2、作用

  • 创建一个独立的作用域,避免了命名冲突问题

14、pageshow重新加载页面

15、scroll

属性

作用

element.scrollTop

返回被卷去的上侧距离,不带单位

element.scrollLeft

返回被卷去的上侧距离,不带单位

element.scrollWidth

返回自身实际宽度,不带单位

element.scrollHeight

返回自身实际高度,不带单位

  • 当内容撑开盒子时,scrollHeight是内容的实际高度,否则和clientHeight一样。

17、flexible.js

  • 给 body 设置大小是为了给没有设置字体大小的元素继承

  • 给 html 设置大小

  • rem原理:document.documentElement.style.fontSize = innerWidth / 10 + "px"

六、动画函数封装

1、原理

  • 通过定时器setInterval()不断移动盒子位置

2、简单动画函数封装

// obj目标对象 target 目标位置
functionanimate(obj, target) {
    obj.timer=setInterval(function() {
        if (obj.offsetLeft>=target) {
        // 停止动画 本质是停止定时器
             clearInterval(obj.timer);
         }
        obj.style.left=obj.offsetLeft+1+'px';
    }, 30);
}

3、缓动动画

算法

  • 步长:(目标值-当前的位置)/ 10 ---(步长要取整数)

  • 停止条件:盒子当前的位置等于目标位置

functionanimate(obj, target) {
// 先清除以前的定时器,只保留当前的一个定时器执行
    clearInterval(obj.timer);
    obj.timer=setInterval(function() {
    // 步长值写到定时器的里面
    // 把我们步长值改为整数 不要出现小数的问题
    // var step = Math.ceil((target - obj.offsetLeft) / 10);
         varstep= (target-obj.offsetLeft) /10;
         step=step>0?Math.ceil(step) : Math.floor(step);
         if (obj.offsetLeft==target) {
            // 停止动画 本质是停止定时器
             clearInterval(obj.timer);
          }
        // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10
        obj.style.left=obj.offsetLeft+step+'px';
​
      }, 15);
 }
varspan=document.querySelector('span');
varbtn500=document.querySelector('.btn500');
varbtn800=document.querySelector('.btn800');
btn500.addEventListener('click', function() {
    // 调用函数
    animate(span, 500);
})
btn800.addEventListener('click', function() {
    // 调用函数
    animate(span, 800);
})

4、回调函数

七、移动端网页特效

1、触摸事件

八、本地存储

1、sessionStorage

  • 关闭浏览器窗口数据销毁

  • 在同一个窗口下数据共享

  • 可以存储 5M 数据

设置值

sessionStorage.setItem(key, value)

获取值

sessionStorage.getItem(key)

删除数据

sessionStorage.removeItem(key)

删除所有数据

sessionStorage.clear()

2、localStorage

  • 持久化存储,可以手动删除

  • 同一浏览器不同页面可以共享数据

  • 可以存储 20M

设置值

localStorage.setItem(key, value)

获取值

localStorage.getItem(key)

删除数据

localStorage.removeItem(key)

删除所有数据

localStorage.clear()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值