# day01 - Web APIs
学习目标:
可以对元素属性进行操作
可以对元素内容进行设置
可以对元素样式进行设置
# 1. 变量声明
# 1.1 var、 let 和 const
变量声明有三个,我们应该用哪个呢?
- 首先 var 先排除,老派写法,问题很多,可以淘汰掉。
- let or const ?
- 建议:<span style="color: red">const 优先 </span>,尽量使用 const,原因是:
- const 语义化更好
- 很多变量我们声明的时候就知道他不会被更改了,那为什么不用 const 呢?
- 实际开发中也是,比如 react 框架,基本 const
- 如果你还在纠结,那么我建议:
- 有了变量先给 const,如果发现它后面是要被修改的,再改为 let
练习:
请问以下的 可不可以把 let 改为 const?
1 | // 测试1 |
请问以下的 可不可以把 let 改为 const?
1 | // 测试1 |
请问以下的 可不可以把 let 改为 const?
1 | // 测试1 |
注意:
- const 声明的值不能更改,而且 const 声明变量的时候需要里面进行初始化
- 但是对于引用数据类型,const 声明的变量,里面存的不是 值,不是值,不是值,是 地址。
测试
1 | // 可以改为 const 吗 |
总结:
- 以后声明变量我们优先使用哪个?
- 为什么 const 声明的对象可以修改里面的属性?
- 什么时候使用 let 声明变量?
# 2. Web API 基本认知
# 2.1 作用和分类
- 作用:就是使用 JS 去操作 html 和浏览器
- 分类:DOM (文档对象模型)、BOM(浏览器对象模型)
# 2.2 什么是 DOM
- DOM(Document Object Model—— 文档对象模型)是用来呈现以及与任意 HTML 或 XML 文档交互的 API
- 简单理解:DOM 是一个对象,用来操作网页的。
- 例如:改变网页内容、样式等。
# 2.3 总结:
- Web API 阶段我们学习哪两部分?
- DOM 是什么?有什么作用?
# 2.4 DOM 树
- 将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树
- 作用:文档树直观的体现了标签与标签之间的关系
节点是文档树的组成部分,每一个节点都是一个 DOM 对象,主要分为元素节点、属性节点、文本节点等。
- 【元素节点】其实就是 HTML 标签,如上图中
head
、div
、body
等都属于元素节点。 - 【属性节点】是指 HTML 标签中的属性,如上图中
a
标签的href
属性、div
标签的class
属性。 - 【文本节点】是指 HTML 标签的文字内容,如
title
标签中的文字。
# 2.5 DOM 对象
- DOM 对象:浏览器根据 html 标签生成的 JS 对象
- 所有的标签属性都可以在这个对象上面找到
- 修改这个对象的属性会自动映射到标签身上
- DOM 的核心思想
- 把网页内容当做对象来处理
- document 对象
- 是 DOM 里提供的一个对象
- 网页所有内容都在 document 里面
# 2.6 总结
- DOM 树是什么?
- DOM 对象怎么创建的?
- document 是什么?
# 3. 获取 DOM 对象
根据 CSS 选择器来获取 DOM 元素 (重点)
其他获取 DOM 元素方法(了解)
思考:我们想要操作某个标签首先做什么?
# 3.1 根据 CSS 选择器来获取 DOM 元素 (重点)
# 3.1.1 选择匹配的第一个元素
1 | // 语法 |
# 3.1.2 选择匹配的多个元素
1 | // 语法 |
# 3.1.3 总结
- 获取一个 DOM 元素我们使用谁?
- 获取多个 DOM 元素我们使用谁?能直接修改吗? 如果不能可以怎么做到修改?
# 3.1.5 注意
document.querySelectorAll('css选择器')
得到的是一个伪数组- 有长度有索引号
- 但是没有数组的方法,如 push (),pop ()
- 想要得到里面的每一个元素对象,需要遍历。
# 3.2 总结
- 获取页面中的标签我们最终常用那两种方式?
- 他们两者的区别是什么?
- 他们两者小括号里面的参数有神马注意事项?
- 里面写的是 css 选择器
- 必须是字符串
# 3.3 其它获取 DOM 元素的方法(了解)
1 | // 根据id获取一个元素对象 |
# 4. 操作元素内容
- 元素对象.innerText 属性
- 元素对象.innerHTML 属性
# 4.1 元素.innerText 属性
获取或设置标签内容
示例:
1 | const box = document.querySelector('.box') |
注意:<span style="color: red"> 不识别 html 标签 </span>
# 4.2 元素.innerHTML 属性
获取或设置标签内容
示例:
1 | const box = document.querySelector('.box') |
注意:<span style="color: red"> 识别 html 标签 </span>
# 4.3 总结
- 设置 / 修改 DOM 元素内容有哪 2 种方式?
- 二者的区别是什么?
# 4.4 年会抽奖案例
- 需求:从数组随机抽取一等奖、二等奖和三等奖,显示到对应的标签里面。
- 分析
- 声明数组: const personArr = [' 周杰伦 ', ' 刘德华 ', ' 周星驰 ', 'Pink 老师 ', ' 张学友 ']
- 一等奖:随机生成一个数字(0~ 数组长度),找到对应数组的名字
- 通过 innerText 或者 innerHTML 将名字写入 span 元素内部
- 二等奖依次类推
# 5. 操作元素属性
# 5.1 操作元素常用属性
通过 JS 设置 / 修改标签元素属性,比如通过 src 更换 图片
常见的属性比如: href、title、src 等
语法:
元素对象.属性 = 值
示例:
1 | // 1. 获取图片元素 |
# 5.1.2 练习 页面刷新,图片随机更换
- 需求:当我们刷新页面,页面中的图片随机显示不同的图片
- 分析:
- 随机显示,则需要用到随机函数
- 更换图片需要用到图片的 src 属性,进行修改
- 核心思路:
- 获取图片元素
- 随机得到图片序号
- 图片.src = 图片随机路径
# 5.2 操作元素样式属性
- 可以通过 JS 设置 / 修改标签元素的样式属性
- 比如通过 轮播图小圆点自动更换颜色样式等
# 5.2.1 通过 style 属性操作 CSS
- 语法:
对象.style.样式属性 = 值
示例:
1 | // 1. 获取元素 |
注意:
- 修改样式通过 style 属性引出
- 如果属性有 - 连接符,需要转换为小驼峰命名法
- 赋值的时候,需要的时候不要忘记加 css 单位
- <span style="color: red"> 修改的是行内样式 </span>
案例: 页面刷新,页面随机更换背景图片
- 需求 当我们刷新页面,页面中的背景图片随机显示不同的图片
- 分析:
- 随机函数
- css 页面背景图片 background-image
- 标签选择 body, 因为 body 是唯一的标签,可以直接写 document.body.style
1 | // console.log(document.body) |
# 5.2.2 操作类名 (className) 操作 CSS
- 如果修改的样式比较多,直接通过 style 属性修改比较繁琐,我们可以通过借助于 css 类名的形式。
- 语法:
元素对象.className = 'active'
示例:
1 | // 1. 获取元素 |
注意:
- 由于 class 是关键字,所以使用 className 去代替
- className 是使用新值换旧值,如果需要添加一个类,需要保留之前的类名
# 5.2.3 总结
- 使用 className 有什么好处?
- 使用 className 有什么注意事项?
# 5.2.4 通过 classList 操作类控制 CSS
为了解决 className 容易覆盖以前的类名,我们可以通过 classList 方式追加和删除类名
语法:
1
2
3
4
5
6// 追加一个类
元素.classList.add('类名')
// 删除一个类
元素.classList.remove('类名')
// 切换一个类
元素.classList.toggle('类名')
# 5.2.5 总结
使用 className
和 classList
的区别?
className
修改大量类名的时候更方便classList
修改不多类名的时候更方便classList
是追加和删除不影响以前类名
# 5.2.6 轮播图随机版
需求:当我们刷新页面,页面中的轮播图会显示不同图片以及样式
- 图片会随机变换
- 底部盒子背景颜色和文字内容会变换
- 小圆点随机一个高亮显示
分析:
- 准备一个数组对象,里面包含详细信息
- 随机选择一个数字,选出数组对应的对象,更换图片,底部盒子背景颜色,以及文字内容
- 利用这个随机数字,让小圆点添加高亮的类(addClass) 利用 css 结构伪类选择器
# 5.3 操作表单元素 属性
- 表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框
- 正常的有属性有取值的 跟其他的标签属性没有任何区别
- 语法
- 获取: 元素对象。属性名
- 设置: DOM 对象。属性名 = 新值
示例:
1 | // 1 获取元素 |
- 表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 如果为 true 代表添加了该属性 如果是 false 代表移除了该属性
- 比如: disabled、checked、selected
示例:
1 | // 1. 获取 |
# 5.4 自定义属性
- 内置属性:标签天生自带的属性 比如 class id title 等,可以直接使用点语法操作比如: disabled、checked、selected
- 自定义属性:
- 在 html5 中推出来了专门的 data - 自定义属性
- 在标签上一律以 data - 开头
- 在 DOM 对象上一律以 dataset 对象方式获取
# 6. 定时器 - 间歇函数
- 网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发
- 例如:网页中的倒计时
- 要实现这种需求,需要定时器函数
- 定时器函数有两种,今天我先讲间歇函数
# 6.1 定时器函数基本使用
# 6.1.1 开启定时器
- setInterval (函数名,间隔时间) 函数名不要加小括号
示例:
1 | setInterval(function () { |
注意:
- 函数名字不需要加括号
- 定时器返回的是一个数字,作为定时器的 ID
# 6.1.2 关闭定时器
- clearInterval (定时器 ID)
示例:
1 | let m = setInterval(function () { |
# 6.1.3 总结
- 定时器函数有什么作用?
- 定时器函数如何开启?
- 定时器函数如何关闭?
# 6.2 案例 阅读注册协议
需求:按钮 60 秒之后才可以使用
分析:
- 开始先把按钮禁用(disabled 属性)
- 一定要获取元素
- 函数内处理逻辑
- 秒数开始减减
- 按钮里面的文字跟着一起变化
- 如果秒数等于 0 停止定时器 里面文字变为 同意 最后 按钮可以点击
# 7. 综合案例 轮播图定时器版
需求:每隔一秒钟切换一个图片
分析:
- 准备一个数组对象,里面包含详细信息
- 获取元素
- 设置定时器函数
- 设置一个变量 ++
- 找到变量对应的对象
- 更改图片、文字信息
- 激活小圆点:移除上一个高亮的类名,当前变量对应的小圆点添加类
- 处理图片自动复原从头播放(放到变量 ++ 后面,紧挨)
- 如果图片播放到最后一张, 就是大于等于数组的长度,则把变量重置为 0