DOM 事件类
DOM事件的级别:
DOM级别一共可以分4个级别:DOM0级、DOM1级、 DOM2级 、DOM3级。而DOM事件级别分为3个级别:DOM0级事件处理、DOM2级事件处理、DOM3级事件处理
1. DOM0级事件:
通过onclick 进行事件绑定
事件绑定:element.onclick=function(){}
事件解绑:element.onclick = null;
2. DOM2级事件:
DOM2级事件定义了addEventListener 和 removeEventListener两个方法,分别表示绑定和解绑事件。
addEventListener 方法中有三个参数,分别为:事件名、处理函数 和 是否在捕获时执行事件处理函数。其中,第三个参数为可选的。false(默认): 表示冒泡阶段,true: 表示捕获阶段
事件绑定:element.addEventListener('click',function(){},false)
element.attachEvent('click',function(){}) // IE8及以下版本 attachEvent不需要第三个参数,因为IE8及以下版本只支持冒泡事件
事件解绑:element.removeEventListener('onclick',function(){},false)
element.detachEvent('onclick',function(){}) // IE
3. DOM3级事件:
DOM3级事件在DOM2级事件的基础上添加了事件类型,如 鼠标事件 、键盘事件、滚轮事件等等
DOM事件模型:捕获(从上往下传播,直到目标元素) + 冒泡(从目标元素开始向上传播,直到window)
DOM事件流(或者事件传播):
捕获阶段 -> 目标阶段 ->冒泡阶段
描述DOM事件捕获的具体流程:
在事件的捕获阶段,从window开始一层层往下传播,即:window -> document -> html ->body ->目标元素
下面通过代码来查看,捕获阶段的具体流程,下面代码中分别绑定了 目标元素、body、html、window、document 点击事件
<div id="ev">
目标元素
</div>
<script>
var ev = document.getElementById('ev');
ev.addEventListener('click',function(){
console.log('ev');
},true);
//window
window.addEventListener('click',function(){
console.log('window');
},true); //document
document.addEventListener('click',function(){
console.log('document');
},true); //html
document.documentElement.addEventListener('click',function(){
console.log('html');
},true); //body
document.body.addEventListener('click',function(){
console.log('body');
},true);
</script>
控制台打印结果顺序为:

如果注册的冒泡事件,打印的顺序就会反过来 ev -> body -> html ->document ->window
Event对象的常见应用:
阻止默认事件:envent.preventDefault()
阻止冒泡:event.stopPropagation()
当前所绑定事件的元素:event.currentTarget
被点击的元素:envent.target
evnet.stopImmediatePropagation(): 如果某个元素注册了多个相同事件时,多个事件监听函数会按照顺序依次执行。如果摸个执行函数执行了 evnet.stopImmediatePropagation()方法,则后续的同类型事件将被阻止
自定义事件:
1. new Event():
代码如下:
<div id="ev">
目标元素
</div>
<script>
var element = document.getElementById('ev');
//自定定义事件,名为 alert
var alertEvent = new Event('alert');
//为元素绑定 自定义的alert事件
element.addEventListener('alert',function(event){
console.log(event.detail); //undefined 因为event没有detail这个属性
},false); /*1s钟后触发事件*/ setTimeout(function(){ //让元素触发自定义的事件 element.dispatchEvent(alertEvent); },1000); </script>
new Event() 不能传参数,如果要传参数就要使用下面的方法
2. new CustomEvent():
new CustomEvent() 的event对象多了一个detail属性,我们可以把参数放到detail属性里。这样就可以直接通过event.detail 就可以或得我们要的参数
代码如下:
<div id="ev2">
目标元素
</div>
<script>
var element = document.getElementById('ev2');
//自定定义事件,名为 alert
var alertEvent = new CustomEvent('alert',{'detail':'ceshi'});
//为元素绑定 自定义的alert事件
element.addEventListener('alert',function(event){
console.log(event.detail); //ceshi
},false); /*1s钟后触发事件*/
setTimeout(function(){
//让元素触发自定义的事件
element.dispatchEvent(alertEvent);
},1000); </script>
DOM 事件类的更多相关文章
- DOM事件类
1.DOM中的事件级别 DOM0: element.onclick = function(){} DOM1: 没有与事件相关的设计 DOM2: element.addEventListener('cl ...
- jQuery操作dom事件
参考:jQuery权威指南jQuery初步jQuery选择器jQuery操作domjQuery操作dom事件jQuery插件jQuery操作AjaxjQuery动画与特效jQuery实现导航栏jQue ...
- DOM 事件深入浅出(二)
在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...
- DOM 事件深入浅出(一)
在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...
- DOM事件
在慕课网上学习了DOM事件探秘课程,特此整理了一下笔记. 慕课网DOM事件探秘课程地址:http://www.imooc.com/learn/138 事件 是文档或浏览器窗口中发生的特定的交互瞬间.[ ...
- 理解DOM事件流的三个阶段
本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...
- 你真的了解DOM事件么?
你真的了解DOM事件么? 我们大家都知道,人与人之间的交流可以通过语言,文字,肢体动作,面部微表情等,但是你知道Javascript和HTML之间是通过什么进行交互的么?你又知道Javascript和 ...
- [DOM Event Learning] Section 4 事件分发和DOM事件流
[DOM Event Learning] Section 4 事件分发和DOM事件流 事件分发机制: event dispatch mechanism. 事件流(event flow)描述了事件对象在 ...
- dom事件与event对象总结
1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间. tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序. 事件 ...
随机推荐
- 【东软实训】SQL函数
SQL函数 SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL 一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp”的表,接下来的操作都将 ...
- Android全局异常捕获
PS:本文摘抄自<Android高级进阶>,仅供学习使用 Java API提供了一个全局异常捕获处理器,Android引用在Java层捕获Crash依赖的就是Thread.Uncaught ...
- SQL表变量与临时表区别 + 非游标临时表遍历
SQL表变量与临时表区别 + 非游标临时表遍历 分类: SQL Server2009-11-27 17:01 1196人阅读 评论(2) 收藏 举报 sqlinsert存储sql servermicr ...
- Python机器学习——DBSCAN聚类
密度聚类(Density-based Clustering)假设聚类结构能够通过样本分布的紧密程度来确定.DBSCAN是常用的密度聚类算法,它通过一组邻域参数(ϵϵ,MinPtsMinPts)来描述样 ...
- 微信小程序UI组件库 iView Weapp快速上手
概述 今天在网上突然看到iView新出了一个微信小程序的组件库iView Weapp,自己就上手试了一下,发现用起来还是不错的,把自己使用的过程与大家分享下. 一 预览iView组件 1.可以在手机上 ...
- Python学习笔记(1)——Python的概述(Python的环境、变量、数据类型、基本运算)
Table of Contents 1. Python概述 1.1. Python基础知识 1.2. 运行环境 1.3. Python的格式 1.4. Python的变量. 2. Python的数据类 ...
- 笔试算法题(26):顺时针打印矩阵 & 求数组中数对差的最大值
出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...
- 色码表 Color code table
最近打算更新设计博客页面,需要用到CSS色码表,查了一些资料现转载此处以备以后使用,点击此处查看原文,另外还发现了几个不错的网站: color-hex HTML颜色代码 色碼表 色碼表英文為 Colo ...
- http2提升效率的几个点
1.二进制传输,消息的解析效率更高 2.头部数据压缩,传输效率更高 3.多路复用,可以让请求并发执行 4.服务器推送,可以主动推送数据到浏览器 http2加载图片demo:https://http2. ...
- (蓝桥杯)2018JAVA B组 日志分析
日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞". ...