我们知道在JS中常用的事件有:
那JS中“事件对象”,到底是个什么东西?
首先说JS就是为了实现一些动态的操作,而用户会有时候想去实现一些功能,如提交表单,鼠标点击等,就要在浏览器中触发这个事件,然后浏览器会感知(或者说捕获)到用户的这个行为,就会去响应处理这个事件。这个就称之为事件。
事件的触发,大部分情况下是用户想去操作的一种行为,也就是说,我们并不能确定用户什么时间触发;而且,由于事件的传播机制,我们甚至不能确定事件具体触发在哪个节点;这是一件令人很头疼的事情;
为了解决这个问题,在事件发生以后,系统会调用我们写好的事件处理程序(一段代码)来解决。
系统会在调用处理程序时,把有关事件发生的一切信息,封装成一个对象,作为参数,传送给监听函数(事件处理程序)。那么说这个对象,称之为事件对象。
根据事件类型的不同,事件对象中包含的信息也有所不同;如点击事件中,包含鼠标点击的横纵坐标位置,键盘事件中,包含键盘的键值等;
<body> <div id="div"> <p>pppp</p> </div> <input type="text" value="" id="i"> </body> <script> var d = document.getElementById('div'); //鼠标事件 d.addEventListener('click',function(e){ console.log(e); }); var i = document.getElementById('i'); //键盘事件 i.addEventListener('keydown',k); function k(e){ console.log(e); } </script>
现在了解了事件对象的含义后,我们来看看事件对象中都有哪些属性和方法?
(1) 普通属性:
event.bubbles: 返回一个布尔值,表示当前事件是否会冒泡;
event.eventPhase:返回一个整数值,表示事件流在传播阶段的位置
0:事件目前没有发生。
1:事件目前处于捕获阶段。
2:事件到达目标节点。
3:事件处于冒泡阶段。
event.type: 返回一个字符串,表示事件类型,大小写敏感;
event.timeStamp: 返回一个毫秒时间戳,表示事件发生的时间;
clientX、clientY : 获取鼠标事件触发的X,Y坐标
事件对象
(2) 事件代理/委托属性:
event.target:对事件触发的引用,返回触发事件发生的那个节点。(重点)
event.currentTarget:返回事件当前所在的节点,即正在执行的监听函数所绑定的那个节点。(了解即可)
var d = document.getElementById('d'); d.onclick = function(e){ //返回事件节点 console.log(e.currentTarget); //返回触发节点 console.log(e.target); }
事件代理(事件委托)的含义:由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这个方法叫做事件的代理也叫事件代理或者事件委托。
<head> <title></title> <meta charset="UTF-8"> <style> div{padding: 40px} #div3{width: 300px;height: 300px;border: 1px solid red;} #div2{width: 200px;height: 200px;border: 1px solid red;} #div1{width: 100px;height: 100px;border: 1px solid red} </style> </head> <body> <div id="div3">div3 <div id="div2">div2 <div id="div1">div1</div> </div> </div> </body> <script> var d = document.getElementById('div3'); d.onclick = function(e){ e.target.style.background = 'red'; } </script>
根据上面的代码可以得到三个div的位置大概如下:点击每个div,每个div的整体就会变成红色。主要是通过e.target返回了点击触发的该节点。
(3)阻止浏览器默认行为和阻止事件传播的方法event.preventDefault():该方法 阻止浏览器会执行当前事件的默认行为,比如点击链接后,浏览器跳转到指定页面;或者按一下空格键,页面向下滚动一段距离。event.stopPropagation():该方法 阻止事件在DOM结构中继续传播,防止再触发定义在别的节点上的监听函数。
<body> <div id="div2">2 <div id="div1">1 <a id="a" href="百度2下">我的皎月闻越想闻</a> </div> </div> </body> <script> var d2 = document.getElementById('div2'); var d1 = document.getElementById('div1'); var a = document.getElementById('a'); d2.onclick = function(e){ alert('d2'); } d1.onclick = function(e){ alert('d1'); } a.onclick = function(e){ //阻止事件传播 e.stopPropagation(); alert('a'); //阻止浏览器默认行为 e.preventDefault(); } </script>
使用事件对象,实现一个简单的小案例:跟着鼠标飞的div(通过修改事件对象的XY值)
<body> <div id="div2">2 <div id="div1">1 <a id="a" href="百度2下">我的皎月闻越想闻</a> </div> </div> </body> <script> var d2 = document.getElementById('div2'); var d1 = document.getElementById('div1'); var a = document.getElementById('a'); d2.onclick = function(e){ alert('d2'); } d1.onclick = function(e){ alert('d1'); } a.onclick = function(e){ //阻止事件传播 e.stopPropagation(); alert('a'); //阻止浏览器默认行为 e.preventDefault(); } </script>
点击前(不动)
点击后(跟着鼠标走)
到此这篇关于js中事件对象的文章就介绍到这了,更多相关js事件对象内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍深入理解JS的事件绑定、事件流模型,包括了深入理解JS的事件绑定、事件流模型的使用技巧和注意事项,需要的朋友参考一下 一、JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresize/onchange/onfoucs/onscroll 3.键盘
本文向大家介绍深入理解jQuery 事件处理,包括了深入理解jQuery 事件处理的使用技巧和注意事项,需要的朋友参考一下 浏览器的事件模型 DOM第0级事件模型 1.Event实例 他的属性提供了关于当前正被处理的已触发事件的大量信息。这包括一些细节,比如在哪个元素上触发的事件、鼠标事件的坐标以及键盘事件中单击了哪个键。 2.事件冒泡 当触发 dom 树中一个元素上的事件时,事件模型会检查这个元
本文向大家介绍深入理解jQuery中的事件冒泡,包括了深入理解jQuery中的事件冒泡的使用技巧和注意事项,需要的朋友参考一下 1.什么是冒泡 eg: 当你单击‘内层span元素'时,即触发<span>元素的click事件时,会输出3条记录 即: 内层span元素被点击 外层div元素被点击 body元素被点击 这就是事件冒泡引起的。 2.事件冒泡引发的问题 01.事件对象 在程序中使用事件对
本文向大家介绍JavaScript事件对象深入详解,包括了JavaScript事件对象深入详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript事件对象。分享给大家供大家参考,具体如下: 触发 DOM 上的事件时,会生成一个事件对象 event,它包含着所有与事件有关的信息,诸如导致事件的元素、事件的类型以及其他与特定事件相关的信息。所有的浏览器都支持 event 对象,
本文向大家介绍深入理解jQuery事件绑定,包括了深入理解jQuery事件绑定的使用技巧和注意事项,需要的朋友参考一下 html: javascript: 一些说明: bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 $("a").bind("click",function(){alert("ok");});live(type,[data],fn) 给所有匹配的元
本文向大家介绍深入理解js中this的用法,包括了深入理解js中this的用法的使用技巧和注意事项,需要的朋友参考一下 this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。 1、纯粹函数调用。 其实这里的this就是全局变量。看下面的例子就能很好的理解其实this就是全局对象Global。其实这里的this就是全局变量