触发点击事件方法,解除绑定事件,事件冒泡/捕获,阻止默认事件,事件委托
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .box1 { width: 300px; height: 300px; background-color: red; } .box2 { width: 200px; height: 200px; background-color: #0000FF; } .box3 { width: 100px; height: 100px; background-color: #00FFFF; } </style> </head> <body> <!-- <div style="width: 100px; height: 100px; background-color: red; margin-left: 100px; margin-top: 100px;" id="div"></div> --> <!-- <ul> <li >a</li> <li >a</li> <li >a</li> <li >a</li> </ul> --> <!-- <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> --> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> <li>11</li> <li>12</li> <li>13</li> <li>14</li> </ul> <!-- 事件冒泡 --> <a href="#">111</a> <div class="box1"> <div class="box2"> <div class="box3"></div> </div> </div> <script type="text/javascript"> // 三种触发点击事件 // div.onclick // div.addEventListener()//普遍用这个 // div.attachEvent() //支持id9以上浏览器,其他不支持,指向window //click和onclick方法区别 //click比onclick先执行 // div.addEventListener('onclick',function(){ // console.log('b'); // }) // div.addEventListener('click',function(){ // console.log('a'); // },false) // var div = document.getElementsByTagName('div')[0]; //三种触发事件方式 //一.只能触发一个事件 // div.onclick = function() { // console.log('a'); // }; //二.可以触发多个事件 // div.addEventListener('click',function(){ // console.log('b') // },false) // div.addEventListener('click',function(){ // console.log('c') // },false) //三.IE9独用 可以触发多个事件 attachEvent --- 指向window ,需要使用call进行指向 // div.attachEvent('onclick',function() { // console.log('d'); // }); // 练习题:点击li显示对应的序号 // var li = document.getElementsByTagName('li'); // var len = li.length; // for(var i = 0 ; i < len ; i++) { // (function (i) { // li[i].addEventListener( 'click',function() { // console.log(i) // },false); // }(i)) // }; //封装兼容性的addEvent(elem,type,handle)方法 // function addEvent(elem,type,handle) { // if(elem.addEventListener){ // elem.addEventListener(type,handle,false); // }else if(elem.attachEvent) { // elem.attachEvent('on' + type , function() { // handle.call(elem); // }) // }else { // elem['on' + type] = handle; // } // } // const dom = document.getElementById('div') // addEvent(dom,'click',fun); // function fun() { // console.log('0000') // } //解除绑定事件 //1.第一种方法 // var div = document.getElementsByTagName('div')[0]; // div.onclick = function() { // console.log('a') // this.onclick = null;//执行一次不在执行 // } //2.第二种方法 removeEventListener // var div = document.getElementsByTagName('div')[0]; // div.addEventListener('click',test,false); // function test() { // console.log('www'); // } //div.removeEventListener('click',test,false); //3.第三种方法 ele.detachEvent('on' + type ,fn); //触发顺序:先捕获,后冒泡 //事件冒泡和事件捕获的区别:1.执行顺序的不同,2.事件捕获使用true //事件冒泡:结构上嵌套关系的元素(非视觉上的),会存在事件冒泡功能(打印顺序为:自子元素向父元素冒泡) // var box1 = document.getElementsByClassName('box1')[0]; // var box2 = document.getElementsByClassName('box2')[0]; // var box3 = document.getElementsByClassName('box3')[0]; // box1.addEventListener('click',function(){ // console.log('a'); // },false); // box2.addEventListener('click',function(){ // console.log('b'); // },false); // box3.addEventListener('click',function(){ // console.log('c'); // },false); //事件捕获:结构上嵌套关系的元素(非视觉上),会存在事件捕获,(打印顺序为:字父元素向子元素进行捕获) IE没有捕获事件 // var box1 = document.getElementsByClassName('box1')[0]; // var box2 = document.getElementsByClassName('box2')[0]; // var box3 = document.getElementsByClassName('box3')[0]; // box1.addEventListener('click',function(){ // console.log('a'); // },true); // box2.addEventListener('click',function(){ // console.log('b'); // },true); // box3.addEventListener('click',function(){ // console.log('c'); // },true); //不能冒泡的事件 // focus,blur,change,submit,reset,Select //取消冒泡 W3C event.stopPropagation(不支持ie9一下) cancelBubble = true true 取消冒泡 false 进行冒泡(IE独有) // document.onclick = function() { // console.log('111'); // } // var div = document.getElementsByTagName('div')[0]; // div.onclick = function(e) { // //e.stopPropagation(); // //e.cancelBubble =true; // stopBubble(e);//调用封装的函数 // this.style.background = 'green'; // } // //封装方法 取消冒泡的方法 // function stopBubble(event) { // if(event.stopPropagation) { // event.stopPropagation(); // }else{ // event.cancelBubble = true; // } // } //oncontextmenu 弹出主菜单栏 //避免出现菜单栏(阻止默认事件) 1.return false (以对象熟悉的方法注册的事件才生效) e.preventDefault (W3C标准 ,ie9以下不兼容) e.returnValue = false (只兼容ie9) // document.oncontextmenu = function(e) { // console.log('a'); // //e.preventDefault(); // //return false; // //e.returnValue = false; // preventDefault(e); // } // var a = document.getElementsByTagName('a')[0]; // //点击a标签时,会置顶展示,为了解决默认事件,使用该方法 // a.onclick = function() { // return false; // } // //封装方法 组织默认事件(菜单栏) // function preventDefault(event) { // if(event.preventDefault) { // event.preventDefault(); // }else if(event.returnValue) { // event.returnValue = true; // }else{ // return false; // } // } //event 可以打印出参数 而ie9下打印e的参数需要使用 window.event // var div = document.getElementsByTagName('div')[0]; // div.onclick = function(e) { // var event = e || window.event; // } //事件委托 利用事件冒泡,和事件源对象进行处理 //优点:性能:不需要在循环一个一个绑定事件 ,灵活:当有新的子元素不需要重新绑定 //event.target 火狐只有这个 event.srcElement ie只有这个 这两个chrome都有 // var ul = document.getElementsByTagName('ul')[0]; // ul.onclick = function(e) { // var event = e || window.event; // var target = event.target || event.srcElement; // console.log(target.innerText); // } //onmouseenter onmouseleave onmousemove 预习 //拖拽功能 </script> </body> </html>