通过onclick与addEventListener及两个实例子深度解析DOM的冒泡及捕获事件
1 实例1—点击别处关闭浮层
2 实例2—点击后颜色一层一个层出现的漂亮的彩虹圈
代码效果: 彩虹圈
3 onclick与addEventListener的区别
实例1使用的原生JS,为什么使用addEventListener(),而不使用onclick() —onclick()只能添加一个事件,多个事件时只会输出最后一个,而实例1中存在多个事件,不能用onclick()
onclick与addEventListener实际上可分为:Inline events与Event Listeners
Event Listeners (“addEventListener” and “IE’s attachEvent”)
两者相同点:都是时间监听器。
两者不同点:
- addEventListener:很多浏览器支持addEventListener(IE9、IE10、IE11、chrome、firefox、opera、safari支持),使用方式如下: - 1 
 2
 3
 4
 5
 6- //addEventListener接受三个参数,最后一个参数默认是false。(false表示事件处理将在冒泡阶段执行,true表示事件处理将在捕获阶段执行) 
 //addEventListener(type,listener,options)
 var target = document.getElementById("test");
 target.addEventListener('click',function test(){
 console.log("Hi");
 },false)
- attachEvent:IE中提供的类似addEventListener的事件监听器,使用方式如下: - 1 
 2
 3
 4
 5
 6- //qqq 
 var target = document.getElementById("test");
 target.attachEvent('onclick',test);
 function test(){
 console.log("Hi");
 }
- 理论上,Event Listeners (addEventListener and IE’s attachEvent)可以无限增加事件监听给某个一元素。实际应用的约束就是客户端内存的限制,这一点因每个浏览器而异 - 1 
 2
 3
 4
 5
 6
 7
 8
 9- var target = document.getElementById("test"); 
 target.addEventListener('click',function test(){
 console.log("Hi");
 },false)
 target.addEventListener('click',function test(){
 console.log("Hello");
 },false)
 //Hi
 //Hello
Inline events (“HTML onclick=“” property” and “element.onclick”)
使用方式:
- onclick=“” - 1 - <a id="test" href="#" onclick="function()">clickMe</a> 
- element.onclick - 1 
 2
 3
 4
 5
 6- <a id="test" href="#">clickMe</a> 
 
 var target = document.getElementById('test')
 target.onclick = function(){
 console.log('Hi');
 }
- Inline events只能添加一个事件,如果同时有多个,只会输出最后一个的结果 - 1 
 2
 3
 4
 5
 6
 7
 8- var target = document.getElementById('tttt') 
 target.onclick = function(){
 console.log('Hi');
 }
 target.onclick = function(){
 console.log('Hello');
 }
 //Hello
Inline events与Event Listeners的区别
Event Listeners可以添加无数个(理论上)事件,Inline events只能添加1个事件,且下面的会覆盖上面的。