将要介绍:
1,添加事件的三种方式
2,事件的重新绑定与删除
3,事件流
4,Event对象的属性与方法
目录
一,什么是事件?
事件可以理解为:1,操作触发,比如按下开机键电脑就开机了;2,状态的变化,比如天黑了就要急着回家。
浏览网页时常见时间触发行为有:鼠标点击,鼠标滚轮滚动,表单提交等。
二,DOM的事件分类
1,HTML处理事件
指的是:在HTML代码中声明一个事件类型属性,该属性绑定到一个函数或者对象方法。onclick表示鼠标单击这个事件,将他绑定到事件demo应该这么写:οnclick="demo()"。
2,DOM0级事件
指的是:获取节点对象,然后给这个节点对象添加事件类型属性,让这个属性去绑定一个函数或者对象方法。如果这个属性多次绑定不同的函数或者对象方法,只有最后一个生效。
3,DOM2级事件
这种形式是使用:事件监听方法来实现,事件监听方法的名称为addEventListener(),这个方法是每个节点对象都具有的方法。他需要两个参数,addEventListener(事件类型,指定的方法)。
另外还有一种写法,语法格式如下:
4,总结
HTML事件,DOM0,DOM2是三种添加事件的方式。建议使用DOM2级事件。
5,事件的移除
1,HTML事件直接删除代码就可以移除。
2,DOM0级事件,让事件类型属性绑定到null即可。
3,DOM2级事件使用方法removeEventListener()移除事件。细节如下:
三,鼠标事件
下面这张图中就是所有的鼠标事件,当某个节点对象察觉到相应的鼠标动作,则会执行相关的事件。下面的鼠标事件一般作为:节点对象的属性,然后这个属性去绑定相应的函数或者对象方法。
注意点:按下鼠标事件有两种:一种是click,他是DOM2级事件专用的。另一种是onclick,HTML事件和DOM0级使用,即使用的时候需要加上on这个前缀,比如:onclick,ondbclick。
使用方法如下:
鼠标事件大全:
四,事件流
指的是:当html元素嵌套时,如果每一个层级的元素都绑定了事件,那么这些事件的执行顺序就是事件流。
事件流有两种:1,冒泡流;2,捕获流。
1,冒泡流
IE提出的事件流叫做事件冒泡,即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点。(不好理解,不用深究,看下图记住顺序就像)。
2,事件捕获流
事件捕获流的思想是不太具体的DOM节点应该更早接收到事件,而最具体的节点应该最后接收到事件。(不好理解,不用深究,看下图记住顺序就像)。
很明显,事件捕获流与事件冒泡流是相反的。但是我们应该关注的是:这种自发的去执行所有事件并不是我们想要的结果。
五,Event事件对象
想要执行事件,第一步就是要知道:触发事件的条件是否满足。满足之后又该怎么办?现在介绍当事件触发条件满足之后js是怎么做的,比如:鼠标点击一个按钮之后,js该怎么做才能顺利地执行绑定的函数或者对象方法。
实际上:当事件被感应到,会立即生成一个Event对象,并将这个对象作为参数,传递给事件监听函数。细节如下图:相应动作指的是鼠标单击。
1,Event对象的三个常用属性
1.1 Event.currentTarget属性
这个属性的属性值是一个字符串,内容为:触发当前事件的html元素代码。
演示代码如下:
结果如下:
1.2 Event.target属性
指的是:存在事件流的时候,当前事件也许并不是由自身html元素感应到了事件发生,而是因为事件流自动的被执行了而已。target属性就指向的是最初事件触发时的html元素(或者叫做DOM元素)。
1.3 Event.type属性
是一个字符串,记录的是:当前事件被哪种动作触发的,比如click,dbclick等。
2,Event对象的两个常用方法
2.1 Event.preventDefault()
让某些会执行事件html元素不再自动发生。比如:超链接标签<a></a>,点击他会自动跳转页面,那么使用Event.preventDefault()方法之后,就不会自动跳转了。
2.2 Event.stopPropagation()
存在事件流时,多个事件会自动执行,如果我们不打算让他自动执行,可以使用这个方法。下面的代码只会执行当前触发的事件,事件流之后的事件不会被执行。