• 触发点击事件方法,解除绑定事件,事件冒泡/捕获,阻止默认事件,事件委托


    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<style>
    			.box1 {
    				 300px;
    				height: 300px;
    				background-color: red;
    			}
    			.box2 {
    				 200px;
    				height: 200px;
    				background-color: #0000FF;
    			}
    			.box3 {
    				 100px;
    				height: 100px;
    				background-color: #00FFFF;
    			}
    		</style>
    	</head>
    	<body>
    		<!-- <div style=" 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>
    

      

  • 相关阅读:
    小团队Git协作管理
    android用MediaCodeC将opengl绘制内容录制为一个mp4
    非对称加密算法RSA 学习
    .obj 和 .mtl格式详解
    “m3u8格式简析”与“视频秒开优化”
    Jenkins Android打包(Mac平台)
    java引用Arcface,实现人脸识别(demo)
    ArcFace Demo [Android]
    C# ArcFace 免费人脸识别 2.0 demo
    [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  • 原文地址:https://www.cnblogs.com/wsx123/p/16647782.html
Copyright © 2020-2023  润新知