JavaScript事件流

作者: 简约酒馆 | 来源:发表于2019-11-03 20:56 被阅读0次

    什么是事件

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

    事件流

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

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

    事件冒泡

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

    点击按钮,那么这个click事件会按照这样传播路径传递:<input>→<div>→<body>→<html>→document

    事件冒泡的过程


    事件捕获

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

    点击按钮,那么此时click事件会按照这样传播:document→<html>→<body>→<div>→<input>


    DOM事件流

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

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

    HTML事件处理程序

    HTML事件处理程序。

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

    <input id="btn1" value="按钮" type="button"    onclick="showmsg();">

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

    DOM0级事件处理程序

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

    <input id="btn2" value="按钮" type="button">

    <script>

    var btn2=document.getElementById("btn2");

    btn2.onclick=function(){

         alert("DOM0级添加事件处理");

        }

       btn.onclick=null;//如果想要删除btn2的点击事件,将其置为null即可

    </script>

    DOM2级事件处理程序

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

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

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

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

    <body onload="load()">   onload:事件会在页面或图像加载完毕后立即发生

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

       </body>

    onblur

    input失去焦点

    onfocus

    input获得焦点

    onselect

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

    onchange

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

    onreset

    内容被重置的时候

    onsubmit

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

    onclick

    在对象被点击时发生

    onresize

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

    window.scrollBy:

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

    window.scrollTo:

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

    ondblclick:

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


    相关文章

      网友评论

        本文标题:JavaScript事件流

        本文链接:https://www.haomeiwen.com/subject/kmulbctx.html