1. 程式人生 > >js的回撥函式使用

js的回撥函式使用

原始碼見地址:https://download.csdn.net/download/colourfultiger/10673643

html部分

<div class="box">
			<div id="callback1"></div>
	        <button onclick="testback1(forfun)">callback測試1</button>
		</div>
		
		<div class="box">
			<div class="callback2"></div>
	        <button onclick="testback2(forfun)">callback測試2</button>
		</div>
	    
	    <div class="box">
	    	    <div class="callback3"></div>
	        <button onclick="testback3(forfun)">callback測試3</button>
	    </div>
	    <div class="box">
	    	    <div class="callback4"></div>
	        <button onclick="testback4(forfun)">callback測試4</button>
	    </div>
	    <div class="box">
	    	    <div class="callback5"></div>
	        <button onclick="testback5(SingleAnimation)">callback動畫單向測試5</button>
	    </div>
	    <div class="box">
	    	    <div class="callback6"></div>
	        <button onclick="testback6(Two_wayAnimation)">callback動畫雙向測試6</button>
	    </div>
	    <div class="box">
	    	    <div class="callback7"></div>
	        <button onclick="testback7(forfun7)">callback回撥巢狀測試7</button>
	    </div>

css部分

<style type="text/css">
	    	  .box{
	    	  	 width: 280px;
	    	  	 height: 280px;
	    	  	 background: #6495ED;
	    	  	 display: inline-block;
	    	  	 float: left;
	    	  	 margin-left: 10px;
	    	  	 margin-bottom: 10px;
	    	  }
	    	  #callback1,.callback2,.callback3,.callback4 {
	    	  	 width: 200px;
	    	  	 margin: 0 auto;
	    	  	 display: block;
	    	  }
	    	  #callback1 {
	    	  	 height: 100px;
	    	  	 background: #FFDEAD;
	    	  }
	    	  .callback2 {
	    	  	 height: 150px;
	    	  	 background: #FFDEAD;
	    	  }
	    	  .callback3 {
	    	  	 height: 200px;
	    	  	 background: #FFDEAD;
	    	  }
	    	  .callback4 {
	    	  	 height: 80px;
	    	  	 background: #FFDEAD;
	    	  }
	    	  /*5*/
	    	  .callback5 {
	    	  	 width: 100px;
	    	  	 height: 100px;
	    	  	 background: pink;
	    	  }
	    	  /*6*/
	    	  .callback6 {
	    	  	 width: 100px;
	    	  	 height: 50px;
	    	  	 background: pink;
	    	  }
	    	  .Twoanimation{
	    	  	 background: mediumpurple;
	    	  	 height: 50px;
	    	  	 animation:  mymove 1s alternate;
	    	  	 -webkit-animation:mymove 5s alternate; 
	    	  	 animation-iteration-count:2;
             -webkit-animation-iteration-count:2; /* Safari 和 Chrome */
	    	  }
	    	  @keyframes mymove{
	    	  	from {height: 10px;background: lightgreen;}
	    	  	to  {height: 150px;background: lightsalmon;}
	    	  }
	    	  @-webkit-keyframes mymove /*Safari and Chrome*/
		  {
			from {height: 10px;background: lightgreen;}
	    	  	to  {height: 150px;background: lightsalmon;}
		  }
		  /*7  放大*/
		 .callback7{
		 	width: 50px;
		 	height: 60px;
		 	background: gold;
		 	margin: 0 auto;
		 }
		 .big{
		 	transform: scale(1.5);
		 	-webkit-transform:scale(1.5);
		 	-moz-transform:scale(1.5);
		 	position: relative;
		 	top: 20%;
		 }
		 
	    </style>

js部分,

1、測試一:簡單的回撥效果,順便補充一下對getElementsByClassName獲取資料的寫法以及定時器的做法

//	    	****************************測試一*******基礎回撥的原型***********************
//	    	   一、被回撥函式
	    	   function forfun(){
	    	   	  //1、定時器
	    	   	 setTimeout(function(){
	    	   	 	alert(Date())
	    	   	 	},3000);	    	   	 
	    	   }	 
//	    	   二、各自按鈕對應的函式
	    	   function testback1(callback){
	    	   	 document.getElementById("callback1").style.height="150px";
//	    	   三、回撥函式
	    	   	 callback ();
	    	   }
	    	    function testback2(callback){
//	    	    	2.1、使css類生效的法1
	    	   	 document.getElementsByClassName('callback2')[0].style.height="250px";	    	   	
	    	   	 callback();
	    	   }
	    	     function testback3(callback){
//	    	    	2.2、使css類生效的法2
	    	   	 var callback3 = document.getElementsByClassName('callback3')[0];
	    	   	 callback3.style.height="100px";
	    	   	 callback();
	    	   }
	    	    function testback4(callback){
//	    	    	2.3、使css類生效的法3
	    	   	 var callback4 = document.getElementsByClassName('callback4');
	    	   	 callback4[0].style.height="20px";
	    	   	 callback();
	    	   } 

效果:

點選第一個:height變高,隨後彈出alert裡的內容

2、js測試回撥二  

//	    	****************************測試二*********多個同類回撥加單向動畫*********************
	    	    function testback5(callback){
	    	   	 var callback5 = document.getElementsByClassName('callback5');
	    	   	 callback5[0].style.height="200px";
	    	   	 callback('callback5',"width","200px",0);
	    	   	 callback('callback5',"backgroundColor","orange",0);
	    	   }	  
	    	   //被回撥的內容
	    	   function SingleAnimation(element,attribute,val,i){
	    	   	    var ele = document.getElementsByClassName(element);
	    	   	    switch (attribute){
	    	   	    	case 'color':
	    	   	    	       ele[i].style.color=val;
	    	   	    		break;
	    	   	    	case 'backgroundColor':
	    	   	    	       ele[i].style.backgroundColor=val;
	    	   	    		break;
	    	   	    	case 'width':
	    	   	    	       ele[i].style.width=val;
	    	   	    		break;
	    	   	    	default:
	    	   	    		break;
	    	   	    }
	    	   }

既改變高度,又改變顏色,同時回撥的是同一個函式

3、js測試3  回撥加動畫

//	    	****************************測試三*********回撥加雙向動畫*********************	    	    
            var ontest=true;
            function testback6(callback){
            	 callback('callback6',0);           	 	
            }
	    	   //被回撥的函式  動畫雙向圖  偶數-恢復  單數-執行
	    	   function Two_wayAnimation(element,i){
	    	   	  var ele = document.getElementsByClassName(element);
	    	   	  if(ontest){
           //新增class
	    	   	  	ele[i].classList.add("Twoanimation");	 
	    	   	  	ontest = false;
	    	   	  }else{
	    	   //取消class
	    	   	  	ele[i].classList.remove("Twoanimation");
	    	   	  	ontest = true;
	    	   	  }
	    	   }

補充一點知識:用js來新增class的樣式:ele[i].classList.add("Twoanimation");

4、js測試4

//	    	****************************測試四*********回撥巢狀**延時+放大*********************	    	    
            var testbig = true;
			function testback7(callback){
            	 var callback7 = document.getElementsByClassName('callback7');
            	 callback(bigdiv);  //呼叫回撥1,傳參回撥2         	 	
            }	    	   
	    	   //延時----回撥函式1
	    	    function forfun7(callback){
	    	   	 setTimeout(function(){  //延時執行函式
	    	   	 callback('callback7',0);//呼叫回撥2	  執行的內容體
	    	   	 	},1000);	 	    	   	
	    	   }	 
	    	   //放大----回撥函式2
	    	   function bigdiv(element,i){
	    	   	  var ele = document.getElementsByClassName(element);
	    	   	  if(testbig){
	    	   	  	ele[i].classList.add("big");	 
	    	   	  	testbig = false;
	    	   	  }else{
	    	   	  	ele[i].classList.remove("big");
	    	   	  	testbig = true;
	    	   	  }
	    	   }

在這個效果中使用了回撥函式巢狀,主要是先延時,再放大,注意回撥函式的傳參即可實現效果。