目录
一、事件类型
1.鼠标事件
方法 | 功能 |
---|---|
click | 鼠标点击某个对象时触发事件 |
dblclick | 鼠标双击某个对象时触发事件 |
mouseover | 鼠标被移到某元素之上或者穿过其子元素时触发事件 |
mouseout | 鼠标从某元素移开或者穿过其子元素时触发事件 |
mouseenter | 鼠标被移到某元素之上时触发事件,穿过其子元素时不会再次触发事件 |
mouseleave | 鼠标从某元素移开时触发事件,穿过其子元素时不会再次触发事件 |
mousemove | 鼠标移动时触发事件 |
mousedown | 某个鼠标按键按下时触发事件 |
mouseup | 某个鼠标按键松开时触发事件 |
示例:
<!DOCTYPE html>
<html lang="en">
<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>
<script src='https://code.jquery.com/jquery-3.6.0.min.js'></script>
<style>
section {
width: 500px;
height: 500px;
background-color: red;
}
main {
width: 200px;
height: 200px;
background-color: aqua;
}
</style>
</head>
<body>
<section>
<main>
</main>
</section>
</body>
<script>
//在section上点击时触发
$('section').click(function () {
console.log('click点击事件')
})
//在section上双击时触发
$('section').dblclick(function () {
console.log('dblclick双击事件')
})
// 进入section会触发 进入main时也会触发
$('section').mouseover(function () {
console.log('mouseover鼠标移入事件')
})
// 离开section会触发 从section进入main时也会触发
$('section').mouseout(function () {
console.log('mouseout鼠标移出事件')
})
// 进入section会触发 进入main时则不会触发
$('section').mouseenter(function () {
console.log('mouseenter鼠标移入事件')
})
// 离开section会触发 从section进入main时则不会触发
$('section').mouseleave(function () {
console.log('mouseleave鼠标移出事件')
})
// 鼠标在section上移动就会触发
$("section").mousemove(function () {
console.log('mousemove鼠标移动事件')
})
// 鼠标在section上按下时触发
$('section').mousedown(function () {
console.log('mousedown鼠标按下事件')
})
// 鼠标在section上松开时触发
$('section').mouseup(function () {
console.log('mouseup鼠标松开事件')
})
</script>
</html>
2.键盘事件
方法 | 功能 |
---|---|
keydown | 键盘的某个键被按下或按住时触发事件 |
keyup | 键盘的某个键被松开时触发事件 |
示例:
// 任意键盘按下触发
$(document).keydown(function(){
console.log("键盘按下了")
})
// 任意键盘松开触发
$(document).keyup(function(){
console.log("键盘松开了")
})
3.表单事件
方法 | 功能 |
---|---|
focus | 当元素获得焦点时触发事件 |
blur | 当元素失去焦点时触发事件 |
submit | 当点击提交按钮时触发事件 |
select | 当文本内容被选中时触发事件 |
change | 当用户改变表单元素的内容时触发事件 |
示例:
//.ipt选中的是一个input文本输入框
// 元素获得焦点时触发事件 也就是用户点击输入框输入时
$('.ipt').focus(function(){
console.log("获得焦点")
})
// 元素失去焦点时触发事件
$('.ipt').blur(function(){
console.log('失去焦点')
})
// 点击提交按钮时触发事件
$('form').submit(function(){
console.log('提交内容')
})
// 文本内容被选中时触发事件
$('.ipt').select(function(){
console.log('文本内容被选中')
})
// 输入框的内容发生了修改,并且 回车或者失去焦点 后触发事件
$('.ipt').change(function(){
console.log('内容发生了改变')
})
二、事件处理
1.事件对象
鼠标事件对象
// 鼠标事件对象
$('main').click(function (event) {
console.log(event)
})
键盘事件对象
// 键盘事件对象
$(document).keydown(function (event) {
console.log(event)
})
2.捕获事件流与冒泡事件流
当一个HTML元素产生一个事件的时候,事件会在元素节点之间按照特定的顺序传播,这个传播过程称为DOM事件流。DOM事件流分为捕获事件流和冒泡事件流。捕获事件流指的是当某HTML元素产生一个事件时从根元素向该元素执行事件流,也就是从“它备份最大的祖先”到它依次发生一次该事件。冒泡事件流的顺序正好与捕获事件流的顺序相反。
捕获事件流
//点击了d3之后,从外到内依次触发d1 d2 d3的点击函数。d2同理
var d1 = document.querySelector(".d1")
var d2 = document.querySelector('.d2')
var d3 = document.querySelector(".d3")
//addEventListener()方法的第三个参数为true代表为捕获传播,为空或false代表为冒泡传播
d1.addEventListener(
'click',
function (e) {
console.log("点击d1了")
},
true
)
d2.addEventListener(
'click',
function (e) {
console.log("点击d2了")
},
true
)
d3.addEventListener(
'click',
function (e) {
console.log("点击d3了")
},
true
)
冒泡事件流
// 点击了d3之后,从内到外依次触发d3 d2 d1的点击函数。d2同理
$(".d1").click(function (e) {
console.log("d1被点击了")
})
$(".d2").click(function () {
console.log("d2被点击了")
})
$(".d3").click(function () {
console.log("d3被点击了")
})
阻断事件流的传播
有时候我们可能不太需要事件流,这时我们就可以通过一些方法来阻断事件流的传播,下面以在第二个div元素处阻断事件流的传播为例介绍两种阻断方法。
// return false 阻断
$(".d2").click(function () {
console.log("d2被点击了")
return false
})
//e.stopPropagation() 阻断
d2.addEventListener(
'click',
function (e) {
console.log("点击d2了")
e.stopPropagation()
},
true
)
3.事件绑定
绑定事件
事件绑定可以将事件与函数绑定在一起,当触发此事件时就执行该函数。事件绑定比较自由,可以一对一绑定和多对一绑定。
// 绑定单个事件
$('div').on('click', function () {
console.log('绑定单个事件')
})
// 绑定多个事件
$('div').on('mouseover mouseout', function () {
console.log('绑定多个事件')
})
// 一次绑定多个事件,但是不同事件不同操作
$('div').on({
'mouseenter': function () {
$(this).css("background", 'red')
},
"mouseleave": function () {
$(this).css("background", "green");
},
"click": function () {
$(this).css("background", "blue");
}
})
取消绑定
// 取消指定事件
$('div').off('mouseenter mouseleave')
// 取消全部绑定事件
$('div').off()
4.事件委派
委派事件
我们可以通过事件委派父元素的事件委派给其子元素,这样就相当于其子元素也有了该事件。这样我们就可以只给上级元素添加事件,而不需要给每个子元素添加事件,从而提高了程序的性能。
// 事件委派
$('div').on('click', $('section'), function () {
console.log('div被点击')
})
取消委派
// 取消委派
$('div').off('click')
5.事件切换
hover()函数定义了鼠标移入和移出时要执行的函数,其第一个参数时鼠标移入时需要执行的函数,第二个参数是鼠标移出时需要执行的函数。当只有一个参数时,鼠标移入和移出都执行这个函数。
$('main').hover(
function(){
$(this).css('background','red')
},
function(){
$(this).css('background','green')
}
)
文中若有不当之处,欢迎各位朋友批评指正。