事件监听
Posted cnlisiyiii-stu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事件监听相关的知识,希望对你有一定的参考价值。
在同一个文件中,代码会预解析并且提升。
若加载多个文件时,后续的文件默认会等待上一个文件加载完并执行后,才会继续预解析并执行。
若一定要把先使用的程序文件放在后面的话,可以给它的script标签加上async属性。
1. 事件监听注册事件
语法:事件源.addEventListener(‘事件类型‘,事件处理程序,是否捕获);
1 <body> 2 <button>点击</button> 3 <div> 4 内容 5 </div> 6 <script> 7 var btn = document.querySelector(‘button‘); 8 var div = document.querySelector(‘div‘); 9 btn.addEventListener(‘click‘,function() 10 div.style.width = ‘300px‘; 11 div.style.height = ‘300px‘; 12 div.style.background = ‘red‘; 13 ); 14 btn.addEventListener(‘click‘,function() 15 div.style.color = ‘gold‘; 16 div.style.fontSize = ‘50px‘; 17 ) 18 </script> 19 </body>
事件监听注册事件属于叠加事件,后一个不会覆盖前面相同的事件。
传统注册事件属于覆盖事件,事件源.事件类型 = 事件处理程序。会让后面的事件覆盖前面相同的事件。
若考虑以后的事件扩展,选择事件监听;若不需要扩展,选择传统方式。
事件监听是标准的(官方认可的),但是有兼容问题。(移动端使用较多)
传统方式是非标准的,但是没有兼容问题。(PC端使用较多)
2. 事件监听移除事件
传统移除事件,把原来的事件重新赋值为null
1 btn.onclick = null;
语法:事件源.removeEventListener(‘事件类型‘,事件处理程序的名称);
1 <body> 2 <button>点击</button> 3 <div> 4 内容 5 </div> 6 <script> 7 var btn = document.querySelector(‘button‘); 8 var div = document.querySelector(‘div‘); 9 var fn1 = function() 10 div.style.width = ‘300px‘; 11 div.style.height = ‘300px‘; 12 div.style.background = ‘red‘; 13 ; 14 var fn2 = function() 15 div.style.color = ‘gold‘; 16 div.style.fontSize = ‘50px‘; 17 18 btn.addEventListener(‘click‘,fn1); //fn1不要加小括号() 19 btn.addEventListener(‘click‘,fn2); 20 // 移除fn2 21 btn.removeEventListener(‘click‘,fn2); 22 </script> 23 </body>
3. 事件流
事件触发后的一个流程。有三个阶段:捕获阶段、目标阶段、冒泡阶段。(先捕获,到达目标,再冒泡)
事件监听注册的是 事件源.addEventListener(‘事件类型‘,事件处理程序,是否捕获); 中的第三个元素:
1)事件捕获
true为捕获,从最外层document往内捕获事件,直到捕获到目标为止。
默认为false不捕获,支持事件冒泡,从点击的目标开始,向外层冒泡直到没有为止。
不管是true还是false,冒泡阶段或捕获阶段也都会进行,但是不会展示出来。传输过程一定会经历三个阶段。
2)事件冒泡
传统方式注册事件:默认启用事件冒泡
事件冒泡传输过程:从目标阶段(最先点击的元素)到最外层元素(即document)。
以上是关于事件监听的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX实战:几种事件监听实现,键盘按键事件监听,鼠标滚轮事件监听,鼠标按键事件监听,鼠标移动事件监听