【JavaScript】合体期功法——DOM(二)
目录
- DOM
- 事件监听
- 案例
- 关闭广告
- 随机点名
- 事件监听版本
- 事件类型
DOM
事件监听
事件:编程时系统内发生的动作或事情,例如用户在网页上单击一个按钮
事件监听:让程序检测是否产生事件,一旦事件触发,立即调用函数做出响应,也称为绑定事件或注册事件,如鼠标经过显示下拉菜单、点击播放轮播图等
语法:元素对象.addEventListener (' 事件类型 ', 要执行的函数)
事件监听三要素:
- 事件源:被事件触发的 DOM 元素,需先获取该 DOM 元素
- 事件类型:触发事件的方式,如鼠标单击(click)、鼠标经过(mouseover)等
- 事件调用的函数:事件触发后执行的具体操作(要做的事)
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button>按钮</button>
<script>
// 获取按钮元素
const button = document.querySelector('button')
// 为按钮添加点击事件
button.addEventListener('click', function(){
// 弹出警告框
alert('你点击了按钮')
})
</script>
</body>
</html>
结果如下:
屏幕录制 2025-03-30 212736
注意事项:
- 事件类型要加引号
- 函数是点击之后再去执行,每次点击都会执行一次
案例
关闭广告
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
position: relative;
width: 1000px;
height: 200px;
background-color: skyblue;
margin: 100px auto;
text-align: center;
font-size: 50px;
line-height: 200px;
font-weight: 700;
}
.box1 {
position: absolute;
right: 20px;
top: 10px;
width: 20px;
height: 20px;
background-color: pink;
text-align: center;
line-height: 20px;
font-size: 16px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="box">
广告
<div class="box1">X</div>
</div>
<script>
// 获取事件源
const box1 = document.querySelector('.box1')
const box = document.querySelector('.box')
// 事件侦听
box1.addEventListener('click', function () {
// 隐藏
box.style.display = 'none'
})
</script>
</body>
</html>
结果如下:
屏幕录制 2025-03-30 214210
随机点名
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
h2 {
text-align: center;
}
.box {
width: 600px;
margin: 50px auto;
display: flex;
font-size: 25px;
line-height: 40px;
}
.qs {
width: 450px;
height: 40px;
color: red
}
.btns {
text-align: center;
}
.btns button {
width: 120px;
height: 35px;
margin: 0 50px;
}
</style>
</head>
<body>
<h2>随机点名</h2>
<div class="box">
<span>名字是:</span>
<div class="qs">这里显示姓名</div>
</div>
<div class="btns">
<button class="start">开始点名</button>
<button class="end">停止点名</button>
</div>
<script>
let timeId
const arr = ['张三','李四','王五','赵六','田七','宋八','周九','吴十']
const qs = document.querySelector('.qs')
const start = document.querySelector('.start')
start.addEventListener('click',function () {
timeId = setInterval(function () {
const random = Math.floor(Math.random() * arr.length)
//console.log(arr[random]);
qs.innerHTML = arr[random]
},35)
})
const end = document.querySelector('.end')
end.addEventListener('click',function () {
clearInterval(timeId)
})
</script>
</body>
</html>
结果如下:
屏幕录制 2025-03-30 221210
事件监听版本
DOM 发展历史:
- DOM L0:DOM 发展的第一个版本,L 代表 level
- DOM L1:1998 年 10 月 1 日成为 W3C 推荐标准
- DOM L2:使用
addEventListener
注册事件 - DOM L3:在 DOM 2 级事件基础上重新定义事件,新增部分新事件类型
DOM L0:
事件源.on 事件 = function (){}
DOM L2:
事件源.addEventListener (事件,事件处理函数)
区别:
on
方式绑定的事件处理函数会被覆盖addEventListener
方式可多次绑定同一事件,支持更多事件特性,推荐使用
事件类型
鼠标事件:触发方式为鼠标触发,包含 click
(鼠标点击)、mouseenter
(鼠标经过)、mouseleave
(鼠标离开)
焦点事件:触发与表单光标相关,包含 focus
(获得焦点)、blur
(失去焦点)
键盘事件:触发方式为键盘操作,包含 keydown
(键盘按下触发)、keyup
(键盘抬起触发)
文本事件:由表单输入触发,包含 input
(用户输入事件)
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: skyblue;
}
</style>
</head>
<body>
<div></div>
<script>
const div = document.querySelector('div')
// 鼠标经过
div.addEventListener('mouseenter', function () {
console.log('轻轻的我来了')
})
// 鼠标离开
div.addEventListener('mouseleave', function () {
console.log('轻轻的我走了')
})
</script>
</body>
</html>
结果如下: