DOM 0级事件
把onclick = "..."
写在标签内或者用element.onclick = ...
语句绑定onclick事件,都是dom0级事件,执行的时候第二个会覆盖第一个onclick。(一般来说,行内的onclick="..."
先执行,然后会被其他地方的element.onclick = ...
js语句覆盖)
DOM 2级事件
用jquery添加的事件和用原生的element.addEventListener(...)
添加的事件,都是dom2级事件,不会覆盖,会按照添加监听的顺序依次执行。
DOM 0级事件 和 DOM 2级事件的示例:
<!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>
onload = () => {
console.log('-------------------onload---------------------');
let ele = document.querySelector('.box1');
ele.addEventListener('click', () => {
console.log('DOM 2级事件');
})
ele.addEventListener('click', () => {
console.log('DOM 2级事件2');
})
ele.onclick = () => {console.log('DOM 0级事件2')};
}
</script>
</head>
<body>
<div class="box1" onclick="console.log('DOM 0级事件')">hello</div>
</body>
</html>
控制台输出结果:
DOM2级的事件规定了事件流包含三个阶段
- 捕获阶段(Capture Phase):事件从文档根节点(document)开始向下传播,逐级进入目标元素的父元素。在捕获阶段,事件会依次经过目标元素的所有祖先元素。
- 目标阶段(Target Phase):事件到达目标元素本身。在目标阶段,事件处理程序可以触发并对事件做出响应。
- 冒泡阶段(Bubbling Phase):事件从目标元素开始向上传播,逐级返回到文档根节点。在冒泡阶段,事件会依次经过目标元素的所有祖先元素。
当发生一个事件时,它会按照捕获阶段、目标阶段和冒泡阶段的顺序在DOM结构中传递。默认情况下,大多数事件会经历所有三个阶段。但是,可以使用addEventListener方法的第三个参数来控制事件的传播方式。通过将该参数设置为true,事件将在捕获阶段处理;设置为false(默认值),事件将在冒泡阶段处理。
以下是一个示例,演示了DOM事件分级的应用:
var element = document.getElementById("myElement");
element.addEventListener("click", function(event) {
console.log("目标阶段:点击了元素");
}, false);
document.addEventListener("click", function(event) {
console.log("冒泡阶段:点击了文档");
}, false);
document.documentElement.addEventListener("click", function(event) {
console.log("捕获阶段:点击了文档根节点");
}, true);
在上述示例中,当点击"myElement"元素时,会依次触发捕获阶段、目标阶段和冒泡阶段的事件处理程序。控制台输出将是:
捕获阶段:点击了文档根节点
目标阶段:点击了元素
冒泡阶段:点击了文档
事件对象event
无论在DOM0还是DOM2还是DOM3中都会在事件函数中传入事件对象。
事件对象event下的属性和方法:
因为各个浏览器的事件对象不一样, 把主要的时间对象的属性和方法列出来;
bubble : 表明事件是否冒泡
cancelable : 表明是否可以取消冒泡
currentTarget : 当前时间程序正在处理的元素, 和this一样的;
defaultPrevented: false ,如果调用了preventDefualt这个就为真了;
detail: 与事件有关的信息(滚动事件等等)
eventPhase: 如果值为1表示处于捕获阶段, 值为2表示处于目标阶段,值为三表示在冒泡阶段
target || srcElement: 事件的目标
trusted: 为ture是浏览器生成的,为false是开发人员创建的(DOM3)
type : 事件的类型
view : 与元素关联的window, 我们可能跨iframe;
preventDefault() 取消默认事件;
stopPropagation() 取消冒泡或者捕获;
stopImmediatePropagation() (DOM3)阻止任何事件的运行;
//stopImmediatePropagation阻止 绑定在事件触发元素的 其他同类事件的callback的运行
IE下的事件对象是在window下的,而标准应该作为一个参数, 传为函数第一个参数;
IE的事件对象定义的属性跟标准的不同,如:
cancelBubble 默认为false, 如果为true就是取消事件冒泡;
returnValue 默认是true,如果为false就取消默认事件;
srcElement, 这个指的是target, Firefox下的也是srcElement;
一些常见的事件类型
-
鼠标事件:
click
: 鼠标点击事件mouseover
: 鼠标移入元素事件mouseout
: 鼠标移出元素事件mousedown
: 鼠标按下事件mouseup
: 鼠标松开事件mousemove
: 鼠标移动事件mouseenter
: 鼠标进入元素事件mouseleave
: 鼠标离开元素事件contextmenu
: 右键点击事件dblclick
: 双击事件
-
键盘事件:
keydown
: 键盘按下事件keyup
: 键盘松开事件keypress
: 键盘按键事件
-
表单事件:
submit
: 表单提交事件input
: 输入框内容变化事件change
: 输入框内容改变事件focus
: 元素获取焦点事件blur
: 元素失去焦点事件select
: 文本选中事件
-
文档加载事件:
DOMContentLoaded
: HTML 文档加载完成事件load
: 网页资源(如图片、脚本)加载完成事件beforeunload
: 离开页面或关闭窗口事件
-
视图事件:
resize
: 窗口大小改变事件scroll
: 滚动事件
-
多媒体事件:
play
: 媒体播放事件pause
: 媒体暂停事件ended
: 媒体播放结束事件
-
触摸事件(移动设备):
touchstart
: 触摸开始事件touchmove
: 触摸移动事件touchend
: 触摸结束事件
Comments NOTHING