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 事件类的更多相关文章

  1. DOM事件类

    1.DOM中的事件级别 DOM0: element.onclick = function(){} DOM1: 没有与事件相关的设计 DOM2: element.addEventListener('cl ...

  2. jQuery操作dom事件

    参考:jQuery权威指南jQuery初步jQuery选择器jQuery操作domjQuery操作dom事件jQuery插件jQuery操作AjaxjQuery动画与特效jQuery实现导航栏jQue ...

  3. DOM 事件深入浅出(二)

    在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...

  4. DOM 事件深入浅出(一)

    在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...

  5. DOM事件

    在慕课网上学习了DOM事件探秘课程,特此整理了一下笔记. 慕课网DOM事件探秘课程地址:http://www.imooc.com/learn/138 事件 是文档或浏览器窗口中发生的特定的交互瞬间.[ ...

  6. 理解DOM事件流的三个阶段

    本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...

  7. 你真的了解DOM事件么?

    你真的了解DOM事件么? 我们大家都知道,人与人之间的交流可以通过语言,文字,肢体动作,面部微表情等,但是你知道Javascript和HTML之间是通过什么进行交互的么?你又知道Javascript和 ...

  8. [DOM Event Learning] Section 4 事件分发和DOM事件流

    [DOM Event Learning] Section 4 事件分发和DOM事件流 事件分发机制: event dispatch mechanism. 事件流(event flow)描述了事件对象在 ...

  9. dom事件与event对象总结

    1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间.    tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序.        事件 ...

随机推荐

  1. 【东软实训】SQL函数

    SQL函数 SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL 一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp”的表,接下来的操作都将 ...

  2. Android全局异常捕获

    PS:本文摘抄自<Android高级进阶>,仅供学习使用 Java API提供了一个全局异常捕获处理器,Android引用在Java层捕获Crash依赖的就是Thread.Uncaught ...

  3. SQL表变量与临时表区别 + 非游标临时表遍历

    SQL表变量与临时表区别 + 非游标临时表遍历 分类: SQL Server2009-11-27 17:01 1196人阅读 评论(2) 收藏 举报 sqlinsert存储sql servermicr ...

  4. Python机器学习——DBSCAN聚类

    密度聚类(Density-based Clustering)假设聚类结构能够通过样本分布的紧密程度来确定.DBSCAN是常用的密度聚类算法,它通过一组邻域参数(ϵϵ,MinPtsMinPts)来描述样 ...

  5. 微信小程序UI组件库 iView Weapp快速上手

    概述 今天在网上突然看到iView新出了一个微信小程序的组件库iView Weapp,自己就上手试了一下,发现用起来还是不错的,把自己使用的过程与大家分享下. 一 预览iView组件 1.可以在手机上 ...

  6. Python学习笔记(1)——Python的概述(Python的环境、变量、数据类型、基本运算)

    Table of Contents 1. Python概述 1.1. Python基础知识 1.2. 运行环境 1.3. Python的格式 1.4. Python的变量. 2. Python的数据类 ...

  7. 笔试算法题(26):顺时针打印矩阵 & 求数组中数对差的最大值

    出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...

  8. 色码表 Color code table

    最近打算更新设计博客页面,需要用到CSS色码表,查了一些资料现转载此处以备以后使用,点击此处查看原文,另外还发现了几个不错的网站: color-hex HTML颜色代码 色碼表 色碼表英文為 Colo ...

  9. http2提升效率的几个点

    1.二进制传输,消息的解析效率更高 2.头部数据压缩,传输效率更高 3.多路复用,可以让请求并发执行 4.服务器推送,可以主动推送数据到浏览器 http2加载图片demo:https://http2. ...

  10. (蓝桥杯)2018JAVA B组 日志分析

    日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞". ...