文章目录
一、Window对象
目标:学习window对象的常见属性,知道各个BOM对象的功能含义
1. BOM(浏览器对象模型)
2. 定时器-延时函数
体验延迟函数:
<body>
<button>解除定时器</button>
<script>
let btn = document.querySelector('button')
let timer = setTimeout(function(){
alert('我是延迟函数')
},3000) // 在生效时间前点击按钮解除延迟函数则它不会执行
// 仅执行一次
btn.addEventListener('click',function(){
clearTimeout(timer)
})
</script>
</body>
<body>
<div><img src="../素材/images/ad.png" alt=""></div>
<script>
let off = document.querySelector('div')
let timer = setTimeout(function(){
off.style.display = 'none'
},5000)
</script>
</body>
补充知识点: 递归函数 自己调用自己就是递归函数
注意递归函数一定要添加退出条件,避免函数出现死递归的情况
两个定时器的对比
3. JS执行机制
结果都是:(因为setTimeout是异步任务,要放到两个同步任务结束后再执行)
1111
3333
2222
在延迟函数生效前点击,输出结果为:
1
2
4
3
在延迟函数生效后点击,输出结果为:
1
2
3
4
重点:事件循环的概念(面试)
4. location对象
4.1 案例-页面跳转
<style>
span {
color: red;
}
</style>
</head>
<body>
<!-- 本身就是一个链接,如果直接点击,就会进行跳转 -->
<a href="https://blog.csdn.net/JOUKELOVE/article/details/124072494?spm=1001.2014.3001.5501">支付成功后,<span>5</span>秒之后跳转</a>
<script>
let num = 5
let a = document.querySelector('a')
let timer = setInterval(function(){
num--
a.innerHTML = `支付成功后,<span>${num}</span>秒之后跳转`
// location.href = 'https://blog.csdn.net/JOUKELOVE/article/details/124072494?spm=1001.2014.3001.5501'
if(num === 0) {
clearInterval(timer)
// 跳转页面
location.href = 'https://blog.csdn.net/JOUKELOVE/article/details/124072494?spm=1001.2014.3001.5501'
}
},1000)
</script>
</body>
location,search可以拿到问号后面的参数,location.href得到完整的地址
示例:
reload等价于刷新按钮
点击按钮触发reload对网页进行刷新
5. navigator对象
6. history对象
简单了解一下即可
二、swiper插件
重点是学会如何使用插件
swiper.com.cn 是一个专门做轮播图的技术网站
如果同一个页面会有多个轮播图,最好还是给每个设置独立的名字(如在后缀加类名one、two等),方便管理设置
三、本地存储
重点学习localStorage
<body>
<script>
// 存储数据(简单数据可以直接进行存储) localStorage.setItem('键','值')
localStorage.setItem('uname','jokerxue')
// 获取数据
// localStorage.getItem('键')
console.log(localStorage.getItem('uname'))
// 删除数据
localStorage.removeItem('uname')
</script>
</body>
存储复杂数据需要用JSON格式
// 1. 存储复杂数据类型
let obj = {
uname: 'JokerXue',
age: 20,
address: '太合音乐'
}
// (1)复杂数据类型一定要转换为json字符串再进行存储
//(本地存储只能存储字符串,所以要转换为JSON格式的字符串)
localStorage.setItem('obj', JSON.stringify(obj))
// (2) 取数据 可以使用 JSON.parse() 将json字符串转换为对象
//(获取过来的值是字符串,不是对象没法直接使用,因此我们首先把字符串转换为对象)
console.log(JSON.parse(localStorage.getItem('obj')))
sessionStorage仅作为一个了解即可
综合案例-本地存储学习信息
思路图:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="css/user.css">
</head>
<body>
<h1>新增学员</h1>
<div class="info">
姓名:<input type="text" class="uname">
年龄:<input type="text" class="age">
性别: <select name="gender" id="" class="gender">
<option value="男">男</option>
<option value="女">女</option>
</select>
薪资:<input type="text" class="salary">
就业城市:<select name="city" id="" class="city">
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="广州">广州</option>
<option value="深圳">深圳</option>
<option value="曹县">曹县</option>
</select>
<button class="add">录入</button>
</div>
<h1>就业榜</h1>
<table>
<thead>
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>薪资</th>
<th>就业城市</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- <tr>
<td>1001</td>
<td>欧阳霸天</td>
<td>19</td>
<td>男</td>
<td>15000</td>
<td>上海</td>
<td>
<a href="javascript:">删除</a>
</td>
</tr> -->
</tbody>
</table>
<script>
// 读取本地存储的数据 封装为函数
// 需求1:读取本地存储的数据(封装为函数)
// 如果本地存储有数据, 则返回 JSON.parse() 之后的对象
// 如果本地存储没有数据,则默认写入三条数据,注意存储利用JSON.stringify() 存储JSON格式的数据
function getLocalDate() {
let data = localStorage.getItem('data')
if (data) {
return JSON.parse(data) // {xxxxx}
} else {
// 如果本地存储没有数据,则默认写入三条数据,注意存储利用JSON.stringify() 存储JSON格式的数据
let arr = [
{ stuId: 1001, uname: '欧阳霸天', age: 19, gender: '男', salary: '20000', city: '上海' },
{ stuId: 1002, uname: '令狐霸天', age: 29, gender: '男', salary: '30000', city: '北京' },
{ stuId: 1003, uname: '诸葛霸天', age: 39, gender: '男', salary: '2000', city: '北京' },
]
// 写入到本地存储里面
localStorage.setItem('data',JSON.stringify(arr))
}
}
// getLocalDate()
// 1. 准备好数据后端的数据
// 获取父元素 tbody
let tbody = document.querySelector('tbody')
// 添加数据按钮
// 获取录入按钮
let add = document.querySelector('.add')
// 获取各个表单的元素
let uname = document.querySelector('.uname')
let age = document.querySelector('.age')
let gender = document.querySelector('.gender')
let salary = document.querySelector('.salary')
let city = document.querySelector('.city')
// 渲染函数 把数组里面的数据渲染到页面中
function render() {
// 需求2:渲染模块
// 先读取本地存储数据,然后渲染 给arr
let arr = getLocalDate()
// 先干掉以前的数据 让tbody 里面原来的tr 都没有
tbody.innerHTML = ''
// 在渲染新的数据
// 根据数据的条数来渲染增加 tr
for (let i = 0; i < arr.length; i++) {
// 1.创建tr
let tr = document.createElement('tr')
// 2.tr 里面放内容
// 把序列号设置为自定义属性data-id
tr.innerHTML = `
<td>${arr[i].stuId}</td>
<td>${arr[i].uname}</td>
<td>${arr[i].age}</td>
<td>${arr[i].gender}</td>
<td>${arr[i].salary}</td>
<td>${arr[i].city}</td>
<td>
<a href="javascript:" data-id="${i}">删除</a>
</td>
`
// 3.把tr追加给 tobdy 父元素.appendChild(子元素)
tbody.appendChild(tr)
}
}
// 页面加载就调用函数
render()
add.addEventListener('click', function () {
// 需求3:添加模块
// 注意,先取的最新的本地存储数据,然后追加
let arr = getLocalDate()
// 新增了数据,要把新数据存储到本地存储,别忘记转换
// alert(11)
// 获得表单里面的值 之后追加给 数组 arr 用 push方法
arr.push({
// 得到数组最后一条数据的学号 1003 + 1
stuId: arr[arr.length - 1].stuId + 1,
uname: uname.value,
age: age.value,
gender: gender.value,
salary: salary.value,
city: city.value
})
// console.log(arr)
// 新增完之后,存储到仓库里
localStorage.setItem('data', JSON.stringify(arr))
// 重新渲染我们的函数
render()
// 复原所有的表单数据
uname.value = age.value = salary.value = ''
gender.value = '男'
city.value = '北京'
})
// 删除操作, 删除的也是数组里面的数据 , 但是我们用事件委托
tbody.addEventListener('click', function (e) {
// 需求4:删除模块
// 注意,先取的最新的本地存储数据,然后追加
// 新增了数据,要把新数据存储到本地存储,别忘记转换
let arr = getLocalDate()
// alert(11)
// 我们只能点击了链接 a ,才会执行删除操作
// 那我们怎么知道你点击了a呢?
// 俺们只能点击了链接才能做删除操作
// console.dir(e.target.tagName)
if (e.target.tagName === 'A') {
// alert('你点击了链接')
// 删除操作 删除 数组里面的数据 arr.splice(从哪里开始删,1)
// 我要得到a的id 需要
// console.log(e.target.id)
// 第一条数据不允许删除,避免程序错乱
if(e.target.dataset.id === '0') {
alert('当前数据不允许删除操作')
return
}
arr.splice(e.target.dataset.id, 1)
// 新增了数据,要把新数据存储到本地存储,别忘记转换
// 存储到本地
localStorage.setItem('data', JSON.stringify(arr))
// 重新渲染我们的函数
render()
}
})
</script>
</body>
</html>
重点有两个,一是分辨它是自定义属性,二是得到属性值
dataset是一个集合,把属性都拿进来,但如果有多个自定义属性且想指定某属性时,要加目标属性的后缀,如box.dataset.index