webAPI-DOM
目录
- JavaScript与ECMAScript+
- DOM
- 时间对象属性与方法的集合体
- 定时器函数
- 案例
1.1-JavaScript与ECMAScript
目标:知道 ECMAScript 与 JavaScript 的关系,Web APIs 是浏览器扩展的功能
ECMAScript 是一套语法标准
- 简称ES
我们之前学的语法其实就是 ECMAScript 里的语法
- 变量、数据类型、运算等规则都是 ECMAScript 规定的
JavaScript 是什么?
- 遵守 ECMAScript 规则的一套编程语言
- 严格来讲,ECMAScript 配合浏览器提供的 Web APIs 才称之为 JavaScript
Web APIs 是什么?
- 浏览器提供的一套操作浏览器、页面内容的功能(主要是一些对象和方法 )
1.2-JavaScript和node.js
二、DOM
2.1 DOM概念
什么是DOM
- 把HTML相关标签当作对象处理
DOM树
- 把HTML页面当作页面,叫做DOM树脂
DOM节点
- HTML页面每一个标签叫做DOM节点、元素对象;element
document
- DOM树 整个文档 对象(属性和方法结合体) { } [ ] 万物皆对象:标签
2.1.1 DOM是什么
目标:能说出DOM是什么
DOM是什么?
DOM是浏览器提供的一套专门用来操作网页内容的功能
DOM的核心思想
- 把网页内容当做对象来处理
DOM作用
- 开发网页内容特效和实现用户交互
DOM全称
- Document Object Model(文档对象模型)
2.1.2 DOM树
目标:能说出DOM树是什么
DOM树是什么
- 将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树
- 描述网页内容关系的名词
- 作用:文档树直观的体现了标签与标签之间的关系
2.1.3 DOM节点
目标:能说出DOM节点的类型
DOM节点
- DOM树里每一个内容都称之为节点
节点类型
元素节点
- 所有的标签 比如 body、 div
- html 是根节点
属性节点
- 所有的属性 比如 href
文本节点
- 所有的文本
- 其他
2.1.4 document
目标:能说出document对象的作用
document
是 DOM 里提供的一个对象
所以它提供的属性和方法都是用来访问和操作网页内容的
例:document.write()代表浏览器显示网页内容的区域
网页所有内容都在document里面
document 是学习 DOM 的核心
2.1 DOM概念总结
目标:知道 DOM 相关的概念,建立对 DOM 的初步认识
DOM是什么?
- 文档对象模型
- DOM是浏览器提供的一套专门用来操作网页内容的功能
DOM 树是什么?
- 将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树
- 作用:文档树直观的体现了标签与标签之间的关系
DOM 节点是什么?
- DOM树里每一个内容都称之为节点
- 常见的DOM 节点类型: 元素节点、属性节点、文本节点等
document 是什么?
- 是 DOM 里提供的一个对象,用来访问和操作网页内容的
2.2 查找元素节点
目标:能查找元素DOM节点
- HTML 中任意标签都是【元素类型节点】
- 所以: 查找元素节点就是选择页面中标签元素
- 根据 id 来查找dom元素节点
语法:document.getElementById('标签的id');
- 根据id查找标签
- 传入的id是字符串,记得加引号,直接写id名即可,不需要加 #
- 返回一个匹配到 ID 的 DOM Element 对象(所有节点都是对象)
- 找不到会得到null
- 可以通过对象里面的 nodeType 属性来标识节点类型
// 方法:
// 翻译: get获取得到 Element元素 by通过 id:标签唯一标识
// 作用:获取元素对象
// 参数:字符串、放入找哪个标签ID值,注意不要选择器,没有#
// 返回:
document.getElementById();
- 查找html和body元素节点
// html:第二的单词首字母大写,不常用
// console.log(document.documentElement)
// body
// console.log(document.body)
// webAPI:推荐放在body后面
2.3 操作元素节点
目标:能够操作元素节点更改元素的属性和文本内容
提问:操作标签我们都可以做哪些修改?
标签的属性 比如更换图片修改 img的src 属性
标签的文本内容
语法: 对象. 属性 = 值
举例说明:
//1.获取DOM节点:对象
let img = document.getElementById("pic")
// 2.操作DOM节点:属性和方法结合体
//获img.src=取属性? src alt width 都是DOM节点自带属性名
// img.src imd.id 点语法获取
//设置属性 ?
img.src = "./images/b03.jpg";
img.alt = "啊哈哈哈哈哈";
img.width = "700";
语法:对象.setAttribute(‘属性’,’值’)
/* 设置属性方法:DOM节点上带方法
单词:set 设置 Attribute 属性
参数:
第一:设置哪个属性字符串,
第二:设置的属性值; */
img.setAttribute("src", "./images/b07.jpg")
//目前:两个方式功能一样,推荐使用简单 对象.属性名
语法:对象.style.样式属性 = 值
//1.获取宽度
let div = document.getElementById("box")
/* 2.获取
刚才为什么可以 ? dom : img有这样设置 width = 500
现在是div: style = "width:30epx;height: 300px;"
注意: 具体某个屈性名如何是连字符, 转换为驼峰命名规则只能获取行内样式:*/
console.log(div.width, div.style.width, div.style.backgroundColor)
div.style.width = '600px';
//css 属性的 -连接符与js的减运算符
div.style.backgroundColor = '#333';
案例1-随机变化背景案例:
<style>
body {
/* 不需要设置宽度,设置背景图有效! */
background: url(../代码/images/b01.jpg) no-repeat;
}
</style>
</head>
<body>
<script>
//需求:刷新页面,背景图随机换一个
// 步骤: 1.获取dom节点
let body = document.body;
//随机:1-9随机的一个整数
let i = Math.floor(Math.random() * 9) + 1;
//2.设置背景图片:
body.style.background = `url(../代码/images/b0${i}.jpg) no-repeat`;
</script>
</body>
2.3.2 操作元素文本
目标:能够修改元素的文本更换内容
document.write
只能将文本内容追加到
文本中包含的标签会被解析
//永远都只是追加操作,且只能位置</body>前
document.write( 'Hello world ! ' );
document.write( ' <h3>你好,世界!</h3>')
- innerText 属性
将文本内容添加/更新到任意标签位置
文本中包含的标签不会被解析
l /innerText将文本内容添加/更新到任意标签位置
let info = document.getElementById( ' info ')
//intro.innerText =‘嗨~我叫李雷!’
info.innerText = '<h4>嗨~我叫李雷!</h4>'
//问
let ul = document.getElementById("demo")
ul.innerHTML = "<h2>哈哈大大</h2>"
console.log(ul.innerText, ul.innerHTML)
操作元素小结
操作元素属性有哪些方式?
- 点语法操作属性(推荐) 对象.属性
- setAttribute(‘属性’, ‘值’)
- 对象.style.样式名
操作元素文本有哪些方式?
- document.write()
- innterText 不解析标签
- innerHTML 解析标签
三、时间对象
目标:掌握时间对象,可以让网页显示时间
时间对象:用来表示时间的对象
作用:可以得到当前系统时间
学习路径:
- 实例化
- 时间对象方法
- 时间戳
3.1 实例化
在代码中发现了 new 关键字时,一般将这个操作称为实例化
创建一个时间对象并获取时间
- 获得当前时间
let date = new Date( )
- 获得当前时间
- 获得指定时间
let date = new Date(‘1949-10-01’)
3.2 时间对象方法
目标:能够使用时间对象中的方法写出常见日期
- 因为时间对象返回的数据我们不能直接使用,所以需要转换为实际开发中常用的格式 | 方法 | 作用 | 说明 | | :—-: | :—-: | :—-: | | getFullYear() | 获得年份 | 获取四位年份 | | getMonth() | 获得月份 | 取值为 0 ~ 11 | | getDate() | 获取月份中的每一天 | 不同月份取值也不相同 | | getDay() | 获取星期 | 取值为 0 ~ 6 | | getHours() | 获取小时 | 取值为 0 ~ 23 | | getMinutes() | 获取分钟 | 取值为 0 ~ 59 | | getSeconds() | 获取秒 | 取值为 0 ~ 59 |
案例2-页面显示时间案例:
<div id="box"></div>
<script>
// 需求:页面某个盒子 显示系统时间
// 个位数,0-9 双位数
function fn(num) {
if (num < 10) {
num = '0' + num
}
return num;
}
//步骤
//1.得到时间对象
let time = new Date();
//2.对象上方法执行,获取对于数据
let Y = time.getFullYear();
let M = time.getMonth() + 1;
M = fn(M);
let D = time.getDate();
D = fn(D);
let h = time.getHours();
h = fn(h);
let a = time.getMinutes()
a = fn(a)
// 秒
let t = time.getSeconds()
t = fn(t)
let div = document.getElementById("box")
document.write(`${Y}-${M}-${D}-${h}:${a}:${t}`)
/* 重点:
1.学会时间对象方法使用
2.练习ES6模板字符串
3.函数封装:
什么时候用 ? 发现某个代码逻辑在上下文某些地方重复出现;
关注: 是否需要凌置形参 ? 调用的时侯我是否需要传入实参
是否需要设置返回值 ? 调用的时候,是否需要返回一个数据! */
</script>
3.3 时间戳
目标:能够获得当前时间戳
什么是时间戳
- 是指1970年01月01日00时00分00秒起至现在的毫秒数,它是一种特殊的计量时间的方式
三种方式获取时间:
- 使用 Date().now()
- console.log(Date.now())
- 无需实例化
- 但是只能得到当前的时间戳, 而前面两种可以返回指定时间的时间戳
案例:获取时间戳
<div id="time"></div>
<script>
let fn = function () {
let time1 = new Date()
let time2 = new Date("2021-11-11 0:0:0");
//2.得到时间戳
let numb1 = +time1
let numb2 = +time2
// 3.时间戳:s
let cha = (numb2 - numb1) / 1000;
//天
let day = Math.floor(cha / (24 * 60 * 60));
//时:
let hours = Math.floor(cha / 3600) % 24;
//分
let m = Math.floor(cha / 60) % 60;
//秒:
let s = Math.floor(cha) % 60;
//如何设置显示在页面当中
let div = document.getElementById('time');
div.innerText = `我是秒男:${day}天-${hours}时-${m}分-${s}秒-马上秒射`;
}
fn();
setInterval(fn, 1000);
</script>
3.时间对象总结
目标:掌握时间对象,可以让网页显示时间
实例化时间对象
- new Date()
时间对象方法
- 时间对象里面的方法转换实际所用
时间戳
- date.getTime()
- +new Date()
- Date.now()
- 重点记住 +new Date() 因为可以返回当前时间戳或者指定的时间戳
四、定时器函数
目标:能够使用定时器函数创建定时任务
学习路径:
- 定时器函数介绍
- 定时器函数基本使用
4.1 定时器函数介绍
目标:能够说出定时器函数在开发中的使用场景
网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码
例如:网页中的倒计时
要实现这种需求,需要定时器函数
4.2 定时器函数使用
目标:能够使用定时器函数重复执行代码
- 开启定时器
**setInterval**(函数,间隔时间)
- 作用:每隔一段时间调用这个函数
- 间隔时间单位是毫秒
案例:毕业倒计时
- 关闭定时器
let 变量名 = setInterval(函数,间隔时间)
clearInterval(变量名)
一般不会刚创建就停止,而是满足一定条件再停止
案例4.1:倒计时效果
// 需求:1.console 输出 123456
let index = 0
let fn = function () {
index++
console.log(index)
}
setInterval(fn,1000)
//2.1-9当index数值10的时候,回到0,打印1
let index = 0
let fn = function () {
index++;
if (index == 10) {
index = 1;
}
console.log(index)
}
setInterval(fn, 500)
案例4.2:网页轮播图效果
<img src="../代码/images/desktop_1.jpg" id="pic" width="50%">
let index = 0;
let fn = function () {
index++;
//1.index: 1-9
if (index == 10) {
index = 1;
}
//2.设置图片,找到图片,过去dom节点
let img = document.getElementById('pic')
//3.设置图片地址
img.src = `../代码/images/desktop_${index}.jpg`
}
fn();
setInterval(fn, 2000)
四、定时器函数小结
定时器函数有什么作用?
- 可以根据时间自动重复执行某些代码
定时器函数如何开启?
- setinterval(函数名, 时间)
- 定时器函数如何关闭?
let 变量名 = setInterval(函数,间隔时间)
clearInterval(变量名)
案例4.3-定时器关闭
// 需求2:5s后重试
let index = 5
let timer;
let fn = function () {
index--;
//1.获取DOM
let btn = document.getElementById("btn")
// 2.设置文本字
btn.innerText = `${index}s后重试`
//3.判断当index 不能继续往下走,停止定时器;
if (index == 1) {
clearInterval(timer)
}
}
timer = setInterval(fn, 1000);