700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > js-event(事件对象)详解

js-event(事件对象)详解

时间:2022-12-23 10:07:54

相关推荐

js-event(事件对象)详解

1、事件对象

Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

什么时候会产生Event 对象呢?

例如:当用户单击某个元素的时候,我们给这个元素注册的事件就会触发,该事件的本质就是一个函数,而该函数的形参接收一个event对象。

事件通常与函数结合使用,函数不会在事件发生前被执行!

使用场景即:

var oDIv = document.getElementById('box');oDiv.onclick = function(event){//.........}

2、事件流

2.1、事件流发展史

见:javascript事件系统的发展史 - 司徒正美 - 博客园

2.2、冒泡(由下到上)

意思就是说,假如用户单击了一个元素,该元素拥有一个click事件,那么同样的事件也将会被它的祖先触发,这个事件从该元素开始一直冒泡到DOM树的最上层,这一过程称为事件冒泡。

2.3、捕获(由上到下)

事件捕获和事件冒泡是相反的,也就是说,当用户触发了一个事件的时候,这个事件是从DOM树的最上层开始触发一直到捕获到事件源。

2.4、事件流的写法以及实现方式

标准实现方式使用关键词addEventListener,假如你想要给某一个元素添加事件,现在就可以这样写element.addEventListener(eventType, fn, false)

dom对象.addEventListener(事件类型, 回调函数, 事件机制)

这里的事件类型表示你要使用哪种事件类型比如click,回调函数里面写着触发此事件你要做什么事情,事件机制分为冒泡和捕获,如果为false表示事件冒泡,为true表示事件捕获。

IE写法:

dom对象.attachEvent(eventType, fn)

第一个参数表示事件类型,第二个是回调。这种写法兼容IE,IE没有实现事件捕获。

3、关于event对象

在触发的事件的函数里面我们会接收到一个event对象,通过该对象我们需要的一些参数,比如说我们需要知道此事件作用到谁身上了,就可以通过event的属性target来获取到(IE暂且不谈),或者想阻止浏览器的默认行为可以通过方法preventDefault()来进行阻止。以下是event对象的一些属性和方法。

IE属性(除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性)

标准 Event 属性 下面列出了 2 级 DOM 事件标准定义的属性

4.Event对象的一些兼容写法

获得event对象兼容性写法 event || (event = window.event);获得target兼容型写法 event.target||event.srcElement阻止浏览器默认行为兼容性写法 event.preventDefault ? event.preventDefault() : (event.returnValue = false);阻止冒泡写法 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);

事件绑定和取消事件绑定方法的形式

//事件绑定function on(dom, eventType, fn) {if(dom.addEventListener) {dom.addEventListener(eventType, fn);} else {if(dom.attachEvent) {dom.attachEvent('on' + eventType, fn);}}//取消事件绑定function un(dom, eventType, fn) {if(dom.removeEventListener) {dom.removeEventListener(eventType, fn, false);} else {if(dom.detachEvent) {dom.detachEvent("on" + eventType, fn)}}}

5.事件冒泡和事件捕获demo

<!DOCTYPE html><html><head><meta charset="utf-8"><title>bubble event</title><style type="text/css">body{margin:0;}#one{width:500px;height:500px;background:rgb(255,0,0);border: 1px solid transparent;}#two{width:400px;height:400px;margin: 0 auto;margin-top: 50px;background:rgb(255,50,50);border: 1px solid transparent;}#three{width:300px;height:300px;margin: 0 auto;margin-top: 50px;background:rgb(255,100,100);border: 1px solid transparent;}#four{width:200px;height:200px;margin: 0 auto;margin-top: 50px;background:rgb(255,150,150);}</style></head><body><div id='one'><div id='two'><div id='three'><div id='four'></div></div></div></div><script>var one = document.getElementById('one');var two = document.getElementById('two');var three = document.getElementById('three');var four = document.getElementById('four');var useCapture = false; //false为冒泡获取【目标元素先触发】 true为捕获获取【父级元素先触发】one.addEventListener('click', function(event) {event || (event = window.event);console.log(event);console.log('one');}, useCapture);two.addEventListener('click', function() {console.log('two');}, useCapture);three.addEventListener('click', function() {console.log('three');}, useCapture);four.addEventListener('click', function() {console.log('four');}, useCapture);/*false冒泡点击four div输出结果:four three two one true捕获点击four div输出结果: one two three four*/</script></body></html>

参考资料:javascript event(事件对象)详解 - Sunshine - 博客园

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。