一、事件基础
事件是可以被 JavaScript 侦测到的行为,例如鼠标点击、键盘按键等。js与html的交互就是通过事件来进行的。
1、事件驱动
事件驱动
─────────────────────────────────────────────────────────────
┌──────────┐ ┌──────────┐ ┌──────────┐
│ │ │ │ │ │
│ Source │ ───── │ Event │ ───── │ Handle │
│ │ │ │ │ │
└──────────┘ └──────────┘ └──────────┘
事件源 事件 事件处理程序
element . onclick = function(){}
window . onload = function(){}
─────────────────────────────────────────────────────────────
2、事件集合
(1)鼠标事件
| 事件 | 描述 |
|---|---|
| onclick | 点击 |
| ondblclick | 双击 |
| onmousedown | 按下 |
| onmouseup | 抬起 |
| onmousemove | 移动 |
| onmouseover | 移入 |
| onmouseout | 移出 |
| onmouseenter | 鼠标指针移动到元素上时触发(不支持冒泡) |
| onmouseleave | 鼠标指针移出元素上时触发(不支持冒泡) |
| oncontextmenu | 右键 |
(2)键盘事件
| 事件 | 描述 |
|---|---|
| onkeydown | 按下 |
| onkeyup | 抬起 |
| onkeypress | 按下(只能触发数字字母符号) |
(3)表单事件
| 事件 | 描述 |
|---|---|
| onfocus | 获得焦点 |
| onblur | 失去焦点 |
| onchange | 失去焦点并内容改变 |
| onsubmit | 提交事件(form标签事件) |
| onreset | 重置事件(form标签事件) |
| oninput | 表单输入 |
(4)其他事件
| 事件 | 描述 |
|---|---|
| onscroll | 滚动条事件(滚动条位置改变) |
| onwheel | 鼠标滚轮事件 |
| onresize | 页面尺寸改变 |
| onload | 页面加载完成之后执行该事件 |
| DOMContentLoaded | 页面结构加载完成执行该事件 |
二、事件高级
1、绑定事件的方式
(1)标签绑定事件
<button onclick="click_fn()">click</button>
<script>
function click_fn(){
console.log(this);
}
</script>
(2)Document对象来绑定事件
var button1 = document.querySelector('button')
button1.onclick=function(){
console.log("第一个点击事件的方法");
}
var button2 = document.querySelector('button')
button2.onclick=function(){
console.log("第二个点击事件的方法");
} //第二个点击事件的方法会覆盖第一个方法,所以点击只会触发第二次的点击事件方法
注意:后面的事件会覆盖前面的事件,而不会两者前后触发
2、事件监听
为一个事件添加多个事件处理程序,解决了上面两种方法不能添加多个方法 更精细的控制事件监听器的触发阶段
(1)绑定事件
语法:
element.addEventListener(event,callback,bool);
| 参数 | 类型 | 描述 |
|---|---|---|
| event | string | 表示事件类型的字符串 如:“click” “mouseover” 事件名称不添加on前缀 |
| callback | function | 表示事件处理程序,函数中的this 指向添加监听的对象 |
| bool | boolean | 可选,true表示在捕获阶段调用事件处理程序;false表示在冒泡阶段调用。后面会有事件流的详细解释 |
标签.addEventListener("事件名称",function(){
},false); //兼容到IE9及其以上
标签.attachEvent("事件名称",function(){
}) // ie8及以下
(2)移除事件绑定
语法:
element.removeEventListener(event,callback,bool);
<button id="btn"></button>
<script type="text/javascript">
var btn=document.getElementById('btn');
function handle(){
console.log(this);
}
//兼容到IE9及其以上
btn.addEventListener('click',handle,false); //添加事件处理程序
btn.removeEventListener('click',handle,false); //移除事件处理程序
// ie8及以下
btn.attachEvent('onclick',handle); // 添加
btn.de
本文详细介绍了JavaScript事件的基础知识和高级特性,包括事件驱动、事件集合、事件监听、事件对象、事件流和事件委派。讲解了事件绑定方式、事件监听的兼容写法、事件对象的获取和属性方法,以及DOM事件流的两种模型和事件委派的应用。同时,还探讨了自定义事件的创建、监听和触发,提供了实用的案例分析。
最低0.47元/天 解锁文章
219

被折叠的 条评论
为什么被折叠?



