
本文共 3908 字,大约阅读时间需要 13 分钟。
HTMLDOM操作与事件处理指南
一、事件类型之鼠标事件
鼠标事件通过操作鼠标来触发事件,常用的鼠标事件包括左键单击、左键双击、右键单击等。以下是主要鼠标事件的分类及使用方法:
左键单击事件:
element.onclick = function(){ /*・・・・*/ }
通过左键点击元素时触发事件 左键双击事件:
element.ondblclick = function(){ /*・・・・*/ }
左键连续点击两次,元素可以被选中或打开链接 右键单击事件:
element.oncontextmenu = function(){ /*・・・・*/ }
右键单击元素时触发事件 鼠标按键按下事件:
element.onmousedown = function(){ /*・・・・*/ }
鼠标按下元素时触发事件 鼠标按键抬起事件:
element.onmouseup = function(){ /*・・・・*/ }
鼠标抬起元素时触发事件 鼠标移入事件:
element.onmouseover = function(){ /*・・・・*/ }
鼠标移动到元素边界线附近时触发事件 鼠标移出事件:
element.onmouseout = function(){ /*・・・・*/ }
鼠标移出元素边界线附近时触发事件 鼠标移动事件:
element.onmousemove = function(){ /*・・・・*/ }
鼠标在元素范围内移动时触发事件 [总结]:
- 鼠标移入和移出事件会根据当前标签和子级标签的边界线触发。 - 鼠标enter和leave事件只会在当前标签边界线触发。二、事件类型之表单事件
表单事件与表单控件相关,常用于处理用户输入和表单提交行为。表单事件主要包括焦点获取、输入事件和表单提交事件等:
焦点获取事件:
element.onfocus = function(){ /*・・・・*/ }
当控件焦点获取时触发事件 焦点失去事件:
element.onchange = function(){ /*・・・・*/ }
当控件焦点失去或数据发生改变时触发事件 输入事件:
element.oninput = function(){ /*・・・・*/ }
用户输入时控制台会显示输入内容 表单提交事件:
form.onsubmit = function(e){ /*・・・・*/ }
当用户提交表单时触发事件 [注意]:通过阻止默认事件行为可防止表单提交。 [总结]:
- `input`事件适用于所有绑定输入的控件。 - 处理表单提交时建议结合`e.preventDefault();`阻止默认行为。三、事件类型之键盘事件
键盘事件用于检测用户键盘按键的状态和按键组合,常见于实现弦穿透、快速输入等功能。以下是关键键盘事件的分类及使用方法:
键盘按下事件:
window.onkeydown = function(e){ /*・・・・*/ }
当用户按下键盘任意按键时触发事件 键盘抬起事件:
window.onkeyup = function(e){ /*・・・・*/ }
当用户释放键盘按键时触发事件 按键编码获取:
由于不同浏览器对e.keyCode
和e.which
的兼容性问题,建议使用e.keyCode || e.which
获取按键编码 按键组合判断:
- ctrlKey:
e.ctrlKey
- altKey:
e.altKey
- shiftKey:
e.shiftKey
- [示例]:
if(e.ctrlKey && e.keyCode == 69) { console.log("Ctrl+E按下"); }
关键按键组合:
特殊的按键组合可以通过多次事件处理来实现,结合按键编码和e.ctrlKey
等属性判断。 [总结]:
- 键盘事件只能绑定给`window`、`document`或被选中的控件(如`input`、`select`等)。 - 按键编码具有浏览器通用的唯一性,适合用来区分不同按键。四、事件类型之触摸事件和特殊事件
触摸事件主要用于与移动端交互,常用于触摸屏或移动应用开发。以下是触摸事件及特殊事件的分类:
触摸事件:
touchstart
:触摸开始时触发事件touchend
:触摸结束时触发事件touchmove
:触摸元素在移动时触发事件
特殊事件:
transitionend
:当CSS过度结束时触发事件animationend
:当CSS动画结束时触发事件- [示例]: 内容
长按事件:
通过计算触摸开始和结束的时间戳差值来判定是否为长按。建议使用以下方法检测:const startTime = Date.now(); const endTime = Date.now(); const longPress = endTime - startTime > 1000;
[总结]:
- 触摸事件适用于移动端应用。 - 长按事件通常用于触控设备的长时间按压操作。五、事件对象
事件对象是事件处理函数的参数,其主要作用是提供事件的相关信息,如触发事件的标签、按键信息、组合信息等:
获得事件对象:
function handleClick(e) { e = e || window.event; // 使用事件对象处理 }
事件对象的常用属性:
e.target
:触发事件的标签对象e.tagName
:触发事件的标签名称(大写)e.target.id
:触发事件标签的id
属性值e.target(attrName)
:通过getAttribute
获取指定属性值
事件对象的兼容问题:
- 低版本IE浏览器不支持
e.target
,需使用e.srcElement
兼容语法。 - 按键编码部分需使用兼容代码:
var key = e.keyCode || e.which;
[总结]:
- 事件对象是实现事件处理逻辑的核心工具。 - 事件对象的属性能够帮助开发者获取到事件发生时的详细信息。六、事件对象的目标
事件对象提供了一系列属性和方法来获取或操作触发事件的标签:
获取触发事件的标签:
var targetElement = e.target || e.srcElement;
获取事件目标的相关信息:
- 标签名称:
targetElement.tagName
- 标签
id
值:targetElement.id
- 统一资源标识符(URI):
targetElement.getAttribute('data-uri')
事件绑定兼容性:
- 标签绑定的事件函数需兼容
window.event
。 - 例如:
element.onclick = function(e){ e = e || window.event; }
[总结]:
- 事件对象的目标属性允许开发者获取触发事件的具体标签信息。 - 需要注意不同浏览器对事件对象的属性支持可能存在差异。七、事件传播与冒泡事件
事件的传播是指在标签层级关系基础上,多个标签可能参与事件的处理过程:
冒泡事件机制:
- 当子级标签触发事件时,按浏览器不同,事件会向上的父级标签传播,直到触及
document
。 - [示例]: Inner
阻止事件传播:
- 使用
e.stopPropagation()
方法禁止事件传播。 - 低版本IE浏览器需使用
e.cancelBubble = true;
。 - [示例]:
document.addEventListener('click', function(e){ if(e.stopPropagation){ e.stopPropagation(); }else{ e.cancelBubble = true; } });
事件传播的重要性:
- 父级事件处理程序可在子级事件处理之后执行。
- 有时需阻止事件传播以避免冲突或不必要的操作。
[总结]:
- 事件传播机制决定了多个标签可能参与事件处理。 - 阻止事件传播可避免意外的DOM更新或数据提交。八、事件委托
事件委托是一种优化方式,允许动态添加事件处理器,而无需在每个动态生成的标签上单独绑定事件:
事件委托的概念:
将事件绑定到父级标签上,通过判断触发事件的标签类型(如通过e.target
获取)来执行相应的事件处理函数。 实现方法:
// 事件目标判断 divElement.addEventListener('click', function(e){ const targetElement = e.target; if(targetElement.tagName == 'SPAN'){ // 处理 Span 标签的点击事件 } }
事件委托的优点:
- 避免了大量重复的
for...in
循环。 - 不管标签是否为动态生成的,都可以用父级标签处理事件。
- 代码更简洁,性能更优。
事件委托的适用场景:
- 处理动态生成的标签事件。
- 适合需要根据触发标签类型执行不同操作的情况。
[总结]:
- 事件委托是优化事件处理的高级技巧,特别适用于动态DOM操作。 - 需要通过`e.target`来判断事件触发标签类型。发表评论
最新留言
关于作者
