面向对象 事件 监听的兼容写法 鼠标事件 事件冒泡和事件捕获 自定义下拉框

1.面向对象


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>面向对象</title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	// 字面量创建对象
	var obj = {
		name: '魏忠贤',
		age: 9000
	};
	
	// 工厂方法
	function creatreObj(name,age){
		var obj = new Object();
		
		obj.name = name;
		obj.age = age;
		
		return obj;
	}
	// constructor 
	console.log(obj.constructor);
	var str = '王振';
	console.log(str.constructor);
	/*
	instanceof 判断某一个对象,是否是某一个构造函数构建出来的,如果是则返回true,如果不是则返回false
	基础类型的数据,必须通过构造函数的方式创建,才能在instanceof判断的时候为true
	*/
    console.log(String);
	console.log( str instanceof String );
	var num = 100;
	console.log(num.constructor);
	console.log( num instanceof Number );
	console.log( num.constructor == Number );
	/*
	通过构造函数创建对象
	构造函数都是开发中最常用的方法
	构造函数:就是专门用来创建和构建对象的函数
	工厂方法虽然可以创建一个对象,但是使用的时候没有new,常用声明对象的方法一般都有new
	以前见到过的构造函数(js系统的构造函数)
	Number()
	String()
	Object()
	Boolean()
	Math()
	Date()
	
	构造函数的首字母必须大写,用来区分别的函数
	*/
   function Person(name,age){
	   //  new Object();
	   
	   this.name = name;
	   this.age = age;
	   this.say = function(){
		   console.log(this.name);
	   };
	   
	   // return obj;
   }
   
   function Per(){
	   this.name = name;
	   this.age = age;
	   this.say = function(){
	   		   console.log(this.name);
	   };
   }
   
 
   var p = new Person('郑和',56);
   p.say();
   console.log(p.constructor);
   
   function show(){
	   console.log(this);
   }
   show();
   new show();
   /*
   当使用new调用构造函数的时候,构造函数内部会自动创建一个空对象({}),并且使构造函数内部的this指向这个对象,然后再构造函数的最后,自动返回这个对象
   new 操作符做了什么?
   1.构造函数内部会自动创建一个空对象
   2.改变this指向,把this指向当前对象
   3.在构造函数的最后返回该对象
   */
  
  // 在js中,构造函数可以看成一个类
  function Abc(name,age,sex){
	  this.name = name;
	  this.age = age;
	  this.sex = sex;
	  this.eat = function(){
		  console.log(this.name+'今年'+this.age+'岁');
	  };
  }
  
  var boy = new Abc('孙悟空',600,'猴');
  boy.eat();
</script>

2.事件


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>事件绑定</title>
		<style type="text/css">
			.wp,.wq {
				width:200px;
				height: 200px;
				background: #04BE02;
				margin: 0 auto;
			}
		</style>
	</head>
	<body>
		<button type="button" id="btn">点击</button>
		<span οnclick="show()">点击1</span>
		<div class="wp"></div>
		<button id="btn1">取消事件</button>
		<div class="wq"></div>
		<button id="btn3">取消ie事件</button>
	</body>
</html>
<script type="text/javascript">
	/*
	接触过的事件
	click(单击) scroll(滚动) change(改变) load(加载)
	事件的分类
	1.鼠标事件
	2.键盘事件
	3.其他事件(触摸事件,input事件)
	
	事件的绑定方式
	1.行间绑定(几乎不用)
	2.js绑定(on+事件名)
	
	
	事件绑定,只能绑定一个执行方法,如果绑定多个,那么后面的会覆盖前面的
	通过给事件绑定赋值null,来取消事件绑定
	*/
   function show(){
	   console.log('秋风宝剑孤臣泪');
   }
   
   function see(){
   	   console.log('商女不知亡国恨');
   }
   var btn = document.getElementById("btn");
   btn.onclick = show;
   btn.onclick = see;
   btn.onclick = null;
   /*
   事件监听
   obj.addEventListener(参数1,参数2,参数3)
   参数1:事件名
   参数2:事件的执行函数
   参数3:boolean值,默认是false,明确了该事件是在捕获阶段执行还是在冒泡阶段执行,false 代表在冒泡阶段执行,true代表在捕获阶段执行
   
   特性:
   1.可以对该元素的此事件绑定多个事件执行函数
   2.只支持IE8以上和标准浏览器
   
   取消事件监听
   obj.removeEventListener(参数1,参数2,参数3);
   参数跟addEventListener必须保持一致,否则无法取消事件监听
   
   */ 
   var wp = document.querySelector('.wp');
   // wp.addEventListener('click',show);
   // wp.addEventListener('click',see);
   var btn1 = document.getElementById("btn1");
   btn1.onclick = function(){
	   wp.removeEventListener('click',show);
	   wp.removeEventListener('click',see);
   };
   /*
   直接写在第二个参数中的匿名函数,是没有办法移除的
   */ 
   /* wp.addEventListener('click',function(){
	   console.log('十八新娘八十郎');
   }); */
   /*
   低版本ie的事件监听
   IE 6 7 8
   obj.attachEvent(参数1,参数2)
   参数1:on+事件名
   参数2:事件的执行函数
   
   obj.detachEvent(参数1,参数2) 用来取消低版本ie的事件监听
   */
  var wq = document.querySelector('.wq');
  function juzi(){
	  console.log('橘子洲头');
  }
  wq.attachEvent('onclick',juzi);
  
  var btn3 = document.getElementById("btn3");
  btn3.onclick = function(){
	  wq.detachEvent('onclick',juzi);
  };
</script>

3.监听的兼容写法


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>监听的兼容写法</title>
		<style type="text/css">
			.wp {
				width:200px;
				height:200px;
				background:#04BE02;
				margin: 0 auto 50px;
			}
		</style>
	</head>
	<body>
		<div class="wp"></div>
	</body>
</html>
<script type="text/javascript">
	// 使用构造函数的方式做兼容
	function Tool(obj){
		this.obj = obj;
		this.addEvent = function(evName,fn){
			// 判断浏览器是否支持addEventListener
			if(this.obj.addEventListener){
				//IE高版本和标准浏览器
				this.obj.addEventListener(evName,fn);
			}else{
				this.obj.attachEvent('on'+evName,fn);
			}
		};
	}
	var wp = document.querySelector('.wp');
	var t = new Tool(wp);
	t.addEvent('click',function(){
		alert('尉迟恭');
	});
</script>

4.鼠标事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>鼠标事件</title>
		<style type="text/css">
			.wp,.wp1,.wp2  {
				width:200px;
				height:200px;
				background:#04BE02;
				margin: 0 auto 50px;
				color: #ff0;
				font-size:40px;
			}
			.wp2 {
				background: #666;
			}
		</style>
	</head>
	<body>
		<div class="wp"></div>
		<div class="wp1"></div>
		<div class="wp2"></div>
	</body>
</html>
<script type="text/javascript">
	/*
	1.mousedown  鼠标按下去的事件
	特点:
	无论鼠标的哪一个键按下都会触发
	2.mouseup 鼠标抬起来的事件
	
	3.click 鼠标单击事件
	
	执行顺序
	mousedown -> mouseup -> click
	*/
   function $(n){
	   return document.querySelector(n);
   }
   
   var num = 0;
   $('.wp').onmousedown = function(){
	   num++;
	   this.innerHTML = num;
	   // 解决默认事件
	   return false;
   };
   $('.wp').onmouseup = function(){
	   console.log(num);
   };
   $('.wp').onclick = function(){
	   console.log('点击'+num);
   };
   /*
   鼠标移动事件
   mousemove
   */
  $('.wp').onmousemove = function(){
	  num++;
	  this.innerHTML = num;
  };
  
  /*
  鼠标移入移出事件
  mouseenter - mouseleave
  mouseover - mouseout
  
	1.同时绑定它们四个事件,首先执行 mouserover - mouseout,然后执行mouseenter - mouseleave
	2. mouseenter - mouseleave没有事件冒泡,mouserover - mouseout有事件冒泡
  */
  function rand(m,n){
	  return Math.floor(Math.random()*(n-m+1)+m);
  }
  function randCol(){
	  var r = rand(0,255);
	  var g = rand(0,255);
	  var b = rand(0,255);
	  return 'rgb('+r+','+g+','+b+')';
  }
 
	$('.wp1').onmouseenter = function(){
		this.style.background = randCol();
		console.log(1);
	};
	$('.wp1').onmouseleave = function(){
		this.style.background = randCol();
		console.log(2);
	};
	
	$('.wp1').onmouseover = function(){
		this.style.background = randCol();
		console.log(3);
	};
	$('.wp1').onmouseout = function(){
		this.style.background = randCol();
		console.log(4);
	};
	
	/*
	鼠标单击右键
	contextmenu
	*/
	$('.wp1').oncontextmenu = function(){
		console.log('右键');
		return false;
	};
	// $('.wp1').oncontextmenu = null;
	
	/*
	取消默认事件
	1.如果通过on绑定的事件,直接在函数的最后添加 return false
	2.如果是通过addEventListener方法绑定的事件,return false不能取消默认,通过事件对象的 preventDefault() 方法来取消默认
	*/ 
   document.addEventListener('contextmenu',function(e){
	   console.log(e);
	   console.log('两情若是久长时');
	   e.preventDefault();
   });
   
   /*
   总结:在标准浏览器下,只要函数结合事件进行绑定,那么该函数就会有一个形参,该形参的名字随意定,该参数就是这个事件对象本身
   */ 
  /*
  鼠标双击事件
  dblclick
  
  1.双击的时候,首先执行单击,再执行双击
  2.两者都会执行
  */

 $('.wp2').ondblclick = function(){
 	 console.log('双击');
 };
 $('.wp2').onclick = function(){
 	 console.log('单击');
 };
</script>

5.事件冒泡和事件捕获


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>事件冒泡和事件捕获</title>
		<style type="text/css">
			* {
				margin:0;
				padding: 0;
			}
			.wp,.far,.son {
				padding:50px;
				border:1px #f00 solid;
				margin:0 auto;
			}
			.wp {
				width:500px;
				height:500px;
				background:#04BE02;
			}
			.far {
				background:#ff0;
			}
			.son {
				background:#f0f;
				height:300px;
			}
		</style>
	</head>
	<body>
		<div class="wp">
			<div class="far">
				<div class="son">
					
				</div>
			</div>
		</div>
	</body>
</html>
<script type="text/javascript">
	/*
	什么是事件冒泡
	
	1.点击区域有多个元素
	2.这些元素都对该事件进行了绑定操作
	3.这些元素呈现父子级关系
	
	事件冒泡
	最内层的元素最先开始,执行事件绑定的函数,执行完毕以后,冒泡到父级上,查看父级有没有对该事件进行绑定,如果有,就执行父级上绑定的函数,并且向祖父级冒泡,依次往上冒泡,直到冒泡的终止位置,终止位置是document
	
	阻止事件冒泡,使用事件对象的 stopPropagation() 方法
	
	*/ 
   function $(ele){
	   return document.querySelector(ele);
   }
 
   $('.wp').onclick = function(){
	   console.log('祖父级1');
   };
   $('.far').onclick = function(){
   	   console.log('父级1');
   }; 
   $('.son').onclick = function(event){
   	   console.log('子级1');
	   // event.stopPropagation();
	   return false;
   };
   document.onclick = function(){
    	console.log('document1');
    };
   
   /*
   事件捕获
   只有通过addEventListener(event,fn,true)才能使事件在捕获阶段执行
   从document 一直捕获的事件触发的那个元素上
   
	1.IE8及其以下只有事件冒泡阶段,没有捕获阶段
	2.大部分事件都是在冒泡阶段执行,捕获很少使用
	3.凡是使用on绑定的事件,都是在冒泡阶段执行
   */ 
  /*
   $('.wp').addEventListener('click',function(){
	   console.log('祖父级');
   },true);
   $('.far').addEventListener('click',function(){
   	   console.log('父级');
   },true);
   $('.son').addEventListener('click',function(){
   	   console.log('子级');
   },true);
   document.addEventListener('click',function(){
   	   console.log('祖先级');
   },true);
   */
</script>

6.自定义下拉框


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>自定义下拉框</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}
			#select {
				width:300px;
				height:40px;
				border: 1px #ccc solid;
				cursor: pointer;
				border-radius:4px;
				position: relative;
				margin:50px auto;
			}
			#select>span {
				display: block;
				width:100%;
				height:40px;
				text-align: center;
				line-height:40px;
				font-size:20px;
			}
			#select>ul {
				list-style-type: none;
				width:300px;
				border: 1px #ccc solid;
				border-top: none;
				position: absolute;
				left:-1px;
				top:36px;
				background:#fff;
				display: none;
			}
			#select>ul>li {
				height:30px;
				padding-left:12px;
				line-height:30px;
			}
			#select>ul>li:hover {
				background:#f60;
				color: #fff;
			}
		</style>
	</head>
	<body>
		<div id="select">
			<span>请选择</span>
			<ul>
				<li>西施</li>
				<li>貂蝉</li>
				<li>百里玄策</li>
				<li>百里守约</li>
			</ul>
		</div>
	</body>
</html>
<script type="text/javascript">
	function $(ele){
		return document.querySelector(ele);
	}
	$('span').onclick = function(e){
		$('ul').style.display = 'block';
		e.stopPropagation();
	};
	
	document.onclick = function(){
		$('ul').style.display = 'none';
	};
	
	var li = document.querySelectorAll('li');
	for(var i=0;i<li.length;i++){
		li[i].onclick = function(){
			$('span').innerHTML = this.innerHTML;
			console.log(i);
		};
	}
	
</script>
上一篇:C++实现对角矩阵(一维数组实现)


下一篇:Centos 如何安装 WordPress