前端面试中只要问到事件,就肯定会有DOM事件;
如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的;

DOM事件级别:
DOM0 element.onclick = function() { }
DOM1 一般只有设计规范,没有设计跟事件相关的东西;所以直接跳过
DOM2 element.addEventListener(‘click’, function() { }, false)
DOM3 element.addEventLIstener(‘keyup’, function() { }, false)

DOM3在DOM2的基础上参加了很多的事件类型;

DOM2、DOM3 中的第三个参数表示:该事件在捕获阶段触发(true)、在冒泡阶段触发(false)

DOM事件模型:
就是正常的事件 冒泡 和 捕获
向上冒泡 向下捕获

DOM事件流:
事件流就是: 浏览器在为这个页面与用户做交互的过程中,(比如我点击了鼠标左键)如何将这个左键是传到页面上的,又是如何响应的;

一共分为三个阶段:捕获 -> 目标阶段 -> 冒泡
事件通过 捕获 到达目标元素,这个阶段为 目标阶段; 从目标元素再上传到window对象 即冒泡阶段

DOM事件捕获过程:
一个事件首先会被 window捕获,其捕获流程:
window -> document -> html -> body -> … -> 目标元素

   <style>
#ev {
background: lightblue;
width: 200px;
height: 200px;
text-align: center;
line-height: 200px;
}
</style>
<div id="ev">
目标元素
</div>
<script>
var ev = document.getElementById('ev');
// 为了能表现出事件捕获流程,这里使用在捕获时触发事件
window.addEventListener('click', function() {
console.log('window capture');
}, true) document.addEventListener('click', function() {
console.log('document capture');
}, true) document.body.addEventListener('click', function() {
console.log('body capture');
}, true) ev.addEventListener('click', function() {
console.log('ev capture');
}, true)
</script>

Event对象的常见应用:
event.preventDefault()
阻止 元素的默认行为(如链接的跳转)

event.stopPropagaation()
阻止捕获和冒泡阶段中当前事件的进一步传播。

event.stoplmmediatePropagation()
阻止事件冒泡并且阻止相同事件的其他侦听器被调用。
备注:如果有多个相同类型事件的事件监听函数绑定到同一个元素,当该类型的事件触发时,它们会按照被添加的顺序执行。如果其中某个监听函数执行了 event.stopImmediatePropagation() 方法,则当前元素剩下的监听函数将不会被执行。

event.currentTarget(当前所绑定的事件的元素) event.target(当前被点击元素)
这两个一般都是放在一起问的:
备注: 事件代理: 把子元素的相同事件都放在父元素上,这样只要绑定一次就可以实现多个元素的使用。在这样的情况下,你就需要去判断到底是哪一个子元素被点击了;这里就要用到event.target 。

自定义事件
这属于是进阶了,一般情况下问到这里,你就稳了; 在实际开发中也会经常用到。

    var eve = new Event('custome');
ev.addEventListener('custome', function() {
console.log('custome capture');
})
ev.dispatchEvent(eve);

DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件的更多相关文章

  1. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  2. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  3. 理解的javascript自定义事件

    理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...

  4. 详解javascript实现自定义事件

    这篇文章主要为大家介绍了javascript实现自定义事件的方法,自定义事件,顾名思义,就是自己定义事件类型,自己定义事件处理函数,javascript如何实现自定义事件,需要了解的朋友可以参考下 我 ...

  5. 自定义事件的触发dispatchEvent

    1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: documen ...

  6. (转)js原生自定义事件的触发dispatchEvent

    1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: 1 2 3 d ...

  7. vue第八单元(组件通信 子父,父子组件通信 自定义事件 事件修饰符 v-model props验证 )

    第八单元(组件通信 子父,父子组件通信 自定义事件 事件修饰符 v-model props验证 ) #课程目标 掌握使用props让父组件给子组件传参(重点) 掌握props属性的使用以及prop验证 ...

  8. jquery的自定义事件通过on绑定trigger触发

    jquery绑定自定义事件,可以实现预先绑定好一个处理方法,当需要使用的时候利用jquery trigger来触发自定义事件,以达到方便快捷的目的.我们来假设一个这样的场景,一个textarea中的字 ...

  9. WPF 创建自定义控件及自定义事件

    1 创建自定义控件及自定义事件 /// <summary> /// 演示用的自定义控件 /// </summary> public class ExtButton : Butt ...

  10. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间

    http://blog.csdn.net/pigpigpig4587/article/details/24727791 jQuery事件命名空间 jQuery支持事件命名空间,以方便事件管理.例如,在 ...

随机推荐

  1. SpringBoot简便地打成一个war包

    正常情况下SpringBoot项目是以jar包的形式,通过命令行: java -jar demo.jar 来运行的,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tom ...

  2. 超文本标记语言(Hyper Text Markup Language):构建网页的语言

    超文本标记语言(Hyper Text Markup Language):构建网页的语言

  3. (14)树莓派 - 修改pi账号密码,开启root账号

    https://blog.csdn.net/yoie01/article/details/45115067 1.修改PI账号的密码 password pi 2.开启root账号树莓派使用的linux是 ...

  4. 如何把Eclipse项目迁移到AndroidStudio(如何把项目导入安卓)--这我很困惑

    学习android对我来说,就是兴趣,所以我以自己的兴趣写出的文章,希望各位多多支持!多多点赞,评论讨论加关注. 大佬必备功能. 把Eclipse项目迁移到AndroidStudio 现在就叫你如何把 ...

  5. Windows 10下Xilinx ISE需要注意的事项。

    一是安装.可以在Windows 10下安装Xilinx ISE 14.7. 详见:https://www.eevblog.com/forum/xilinx/guide-getting-xilinx-i ...

  6. WAMP配置允许外网访问、绑定域名

    如果wamp默认端口已经被占用,需要修改,则打开apache目录下的,conf文件下的httpd.conf文件 如图,把框中的默认80端口修改为自己需要的端口,然后重启WAMP即可. 想要实现外网访问 ...

  7. 远程桌面无法连接 提示不支持FIPS安全级别的解决方法

    远程桌面可以通过网络连接到另一台电脑进行操作,可以方便在家操作公司电脑.但是到了这个新公司却出现了一个问题,提示客户端无法建立跟远程计算机的连接,我的天,要命了. 远程桌面无法连接错误提示 仔细一看说 ...

  8. java基础 小知识点汇总篇

    1.&和&& |和|| 的区别? a&b,会执行a,执行b ,得出结论 a&&b,会执行a,如果a false,则不执行b,直接返回false 2.Ma ...

  9. java实现开根号的运算

    面试的时候,偶然被问到,开根号的实现,虽然给面试官讲解了思路,但是没有实际实现过,今天闲来无事,就把自己的思路写一下,做个笔记. 如果某个数字正好可以开根号为2个整数,例如1,4,9等,那就很简单了. ...

  10. Sql Server 2008 R2安装教程

    作者:骄阳似火_2018 来源:CSDN 原文:https://blog.csdn.net/weixin_42773514/article/details/87008537 版权声明:本文为博主原创文 ...