JavaScript事件流

什么是事件

事件是文档或浏览器中发生的特定交互瞬间!

事件流

事件流描述的是从页面中接受事件的顺序。

但有意思的是,IE和Netscape开发团队居然提出了两个截然相反的事件流概念。IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流。

事件冒泡

IE的事件流叫做事件冒泡,即事件开始时由最具体的元素接受,然后逐级向上传播到较为不具体的节点。

点击按钮,那么这个click事件会按照这样传播路径传递:

→→→document


事件冒泡的过程


事件捕获

Netscape团队提出的另一种事件流叫做事件捕获。事件捕获的思想是不太具体的DOM节点应该更早接收到事件,而最具体的节点应该最后接收到事件。

点击按钮,那么此时click事件会按照这样传播:document→→→



DOM事件流

"DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。首先发生的事件捕获,为截获事件提供机会。然后是实际的目标接受事件。最后一个阶段是时间冒泡阶段,可以在这个阶段对事件做出响应


在DOM事件流中,事件的目标在捕获阶段不会接受到事件。这意味着在捕获阶段,事件从document到div后就定停止了。下一个阶段是处于目标阶段,于是事件在input上发生,并在事件处理中被看成冒泡阶段的一部分。然后,冒泡阶段发生,事件又传播回document

HTML事件处理程序

HTML事件处理程序。

即我们直接在HTML代码中添加事件处理程序,

从上面的代码中我们可以看出,事件处理是直接嵌套在元素里头的,这样有一个毛病:就是html代码和js的耦合性太强,如果哪一天我想要改变js中showmsg,那么我不但要再js中修改,我还需要到html中修改,一两处的修改我们能接受,但是当你的代码达到万行级别的时候,修改起来就需要劳民伤财了,所以,这个方式我们并不推荐使用。

DOM0级事件处理程序

即为指定对象添加事件处理, 如:

DOM2级事件处理程序

DOM2级事件定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()。所有DOM节点中都包含这两个方法,并且它们都接受3个参数:要处理的事件名,做为事件处理程序的函数和一个布尔值。最后这个参数如果是true,表示在捕获阶段调用事件处理程序;如果是fasle,表示在冒泡阶段调用事件处理程序。

使用DOM2级事件处理程序的主要好处是可以添加多个事件处理程序。事件处理程序会按照它们的顺序触发。通过addEventListener()添加的时间处理程序只能使用removeEventListener()来移除,移除时传入的参数与添加时使用的参数相同。这也意味着通过addEventListener()添加的匿名函数将无法移除。

注意:这里我们的第三个参数都是false,是在冒泡阶段添加的。大多数情况下,都是就事件处理程序添加到事件流的冒泡阶段,这样可以最大限度的兼容各种浏览器。

onload:一张页面或一幅图像完成加载。

   onload:事件会在页面或图像加载完毕后立即发生

            function(){ alert("页面加载完成")}

   

onblur

input失去焦点

onfocus

input获得焦点

onselect

事件会在文本框中的文本被选中时发生

onchange

事件会在域的内容改变时发生

onreset

内容被重置的时候

onsubmit

事件会在表单中的确认被点击的时候发生

onclick

在对象被点击时发生

onresize

在窗口或框架被调整大小时发生

window.scrollBy:

方法可把内容滚动指定的像素数。

window.scrollTo:

方法可把内容滚动到指定的坐标。

ondblclick:

事件会在对象被双击时发生。



你可能感兴趣的:(JavaScript事件流)