这里写目录标题
1.行内事件
1.概念
监听一个元素的事件,也可以写在标签内
2.语法
3.代码演示
如果事件触发时要执行多句代码,一般会调用函数
此时也可以给函数传参
注:此时函数内的this是window
2.DOM L0事件
1.指的是 DOM 刚诞生时的版本
2.语法
3.代码演示
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div></div>
<script>
// DOM l0的写法
// DOM L0 写法: 相同事件类型只能绑定一次
// DOM L0 写法: 相同元素的相同注册事件,会发生覆盖
// DOM L0 写法: 本质上将函数赋值给onclick属性 - 属性会覆盖
let div = document.querySelector('div')
div.onclick = function () { // 本质上将函数赋值给onclick属性
div.style.backgroundColor = 'gold'
}
// DOM l1的写法
// DOM L1 写法: 相同事件类型可以绑定多次
// DOM L1 写法: 相同元素对象的相同注册事件, 不覆盖, 会随着代码顺序执行
// DOM L1 写法: 本质上调用addEventListener方法
let div = document.querySelector('div')
div.addEventListener('click', function () { // 本质为调用addEventListener方法
div.style.backgroundColor = 'blue'
})
</script>
</body>
</html>
DOM L0 写法: 相同事件类型只能绑定一次
DOM L2 写法: 相同事件类型可以绑定多次
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button class="box">我这是有关于L0的点击按钮</button>
<button id="box2">我这是有关于L1的点击按钮</button>
<script>
// DOM L0写法:相同的事件类型只能绑定一次
// DOM L2写法:相同的事件类型只能绑定多次
let box =document.querySelector('.box')
let btn = document.getElementById('box2')
box.style.marginRight = "100px"
box.onclick = function(){
alert('相同的事件类型只能绑定一次')
}
box.onclick = function(){
alert('L0相同的事件类型只能绑定一次--覆盖版本')
}
btn.addEventListener('click',function(){
alert('相同的事件类型只能绑定多次')
})
btn.addEventListener('click',function(){
alert('相同的事件类型只能绑定多次,不覆盖--我会执行多次,根据代码顺序执行')
})
</script>
</body>
</html>
3.事件移除
1.概念
指的是移除监听的事件,可以提升性能
2.使用场景
比如放大镜的拖拽效果, 当鼠标按下并且移动则添加监听事件,如果鼠标弹起,此时再移动鼠标则需要移除监听事件
3.语法
L0
L1
4.代码演示
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
button{
margin-right: 100px;
}
</style>
</head>
<body>
<button>有关于L0的事件移除</button>
<button class="btn1">有关L2的事件移除</button>
<button id="a">我没有添加移除事件</button>
<script>
// 移除监听的事件 -- 提升性能
// 放大镜的拖拽效果,当鼠标按下的时候,添加监听事件,鼠标弹起,移除事件
// L0的事件移除
// 元素.on事件名 = null
// L2的事件移除
// 元素.removeEventListener('事件类型',移除的函数) --- 匿名函数没法移除
let btn = document.querySelector('button')
let btn1 = document.querySelector('.btn1')
let a = document.getElementById('a')
let btn2 = document.querySelectorAll('button')
console.log(btn2);
// L0的事件移除
btn.onclick = function () {
alert('你好帅的,但是我只说一次')
btn.onclick = null
}
// L2的事件移除
function remove() {
alert('触发的函数必须单独写出来,匿名函数没法移除')
btn1.removeEventListener('click', remove)
}
btn1.addEventListener('click', remove)
// 没有添加移除事件的按钮
a.addEventListener('click', function () {
alert('你可以一直点我,我也能出现弹框')
})
a.addEventListener('click', function () {
alert('你可以一直点我,我也能出现弹框-这是第二遍,再点从头开始')
})
</script>
</body>
</html>
4.事件类型
1.概念
在网页中有各种各样的事件,根据不同类型分为:鼠标事件、键盘事件、表单事件、焦点事件等
2.代码演示
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div></div>
<script>
// click------------- 鼠标单击--鼠标点击一次
// dblclick--------- 鼠标双击--快速双击两次
// mouseover----- 鼠标移入--鼠标经过元素会触发
// mouseout------鼠标移出--鼠标离开元素会触发
// mousemove----鼠标移动--鼠标在元素上移动会触发
// mousedown----鼠标按下--鼠标按下的时候触发
// mouseup------- 鼠标弹起--鼠标弹起的时候触发
let div = document.querySelector('div')
// div.addEventListener('dblclick', function () {
// div.style.backgroundColor = 'gold'
// })
// div.onmouseover = function () {
// div.style.backgroundColor = 'blue'
// }
// div.onmouseout = function () {
// div.style.backgroundColor = 'red'
// }
// div.addEventListener('mousedown', function () {
// div.style.backgroundColor = 'pink'
// })
// div.addEventListener('mouseup', function () {
// div.style.backgroundColor = 'red'
// })
</script>
</body>
</html>
5.事件对象
1.概念
也是个对象,这个对象里有事件触发时的相关信息
2.使用
在事件绑定的回调函数的第一个参数就是事件对象
一般命名为event、ev、e
3.语法
type
获取当前的事件类型
clientX/clientY
获取光标相对于浏览器可见窗口左上角的位置
offsetX/offsetY
获取光标相对于当前DOM元素左上角的位置
4.代码演示
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: springgreen;
border-radius: 50%;
transform: translate(-50%, -50%);
position: absolute;
transform: all .5s;
}
</style>
</head>
<body>
<div></div>
<script>
// 事件对象参数:
// 应用场景: 事件委托 / 鼠标移动
// 事件对象参数如何使用:
// 事件对象参数,必须在事件中使用
// function (even) 中的even就是事件对象
// 里面储存了一系列的事件信息
let div = document.querySelector('div')
div.addEventListener('mousemove', function (even) {
console.log(even);
let x = even.pageX
let y = even.pageY
div.style.left = `${x}px`
div.style.top = `${y}px`
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div></div>
<script>
// 事件对象也是一个对象--具有事件触发的相关信息
// 例如鼠标点击事件事件中,事件对象就存在了鼠标点在哪个位置等信息
// 如何获取:在事件绑定的回调函数中第一参数就是事件对象
// 一般命名为even / ev / e
// 常用属性:
// typeof :获取当前属性的事件类型
// clientX / clientY ----------- 获取光标相对浏览器可视窗口左上角的位置
// offsetX / offsetY ----------- 获取光标相对于当前Dom元素左上角的位置
let box = document.querySelector('div')
box.style.width = "300px"
box.style.height = '300px'
box.style.backgroundColor = 'pink'
box.addEventListener('click', function (even) {
console.log(0);
console.log(typeof even); // 对象,存的事件信息的相关信息
console.log(even); // 对象,存的事件信息的相关信息
})
</script>
</body>
</html>
事件是我们做网页交互必不可少的技能点,事件类型可以用来处理默认行为以及事件委托的等应用点,后续我会进行详细的讲解!