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事件捕获冒泡与捕获

    事件流 JavaScript中,事件流指的是DOM事件流。 概念 事件的传播过程即DOM事件流。 事件对象在 DO...

  • JavaScript事件(一)

    1. Javascript事件流#### 事件流是指页面中对象接受事件的顺序,可以分为冒泡事件流和捕获事件流,首先...

  • JS的原生事件

    javascript原生的事件包括事件流、处理函数、事件对象等。而在兼容性也有问题。 1事件流 事件流是ie和Ne...

  • javascript事件流

    听过冒泡吗,听过捕获吗,是否会觉得很熟悉,但是让你具体的回答,却又说不上什么所以然。 w3c约定的事件触发分为三个...

  • JavaScript事件流

    0.前言 今天来和大家分享一下和为事件流,说真的,对这一个知识点也不太熟悉,之鞥和大家分享我自己的见解,如果有误没...

  • javascript事件流

    事件流事件冒泡,具体到不具体事件捕获,不具体到具体addEventListener=("事件",方法,布尔)tru...

  • 【javascript】事件流

    事件流 事件流描述的是从页面中接收事件的顺序。 IE 的事件流是事件冒泡流,而Netscape Communica...

  • JavaScript事件流

    什么是事件 事件是文档或浏览器中发生的特定交互瞬间! 事件流 事件流描述的是从页面中接受事件的顺序。 但有意思的是...

  • JavaScript事件流

    JavaScript事件流主要有冒泡事件和捕获事件DOM事件流同时支持者两种事件捕获现在统一标准是先捕获再冒泡 a...

  • 事件

    事件 javaScript 与 HTML 之间的交互是通过事件实现的 1.事件流 (1)事件冒泡 IE 的事件流叫...

网友评论

    本文标题:JavaScript事件流

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