javascript小實例,實現99乘法表及隔行變色


人生短暫,廢話不多說,直奔主題!

這個小實例的要求:

實現在頁面中輸出99乘法表。(要求:以每三行為一組,實現隔行變色(顏色為白,紅,黃(也可自己定義)),鼠標滑過每一行,行背景顏色變為藍色,鼠標離開又恢復原來的顏色),隔行變色的效果需要用if和switch兩種判斷方式都能實現;

額,分析一下實例要求:一個99乘法表,一個多方法的隔行變色,鼠標滑過變另外一個顏色,離開恢復原色。  嗯,我們一步步來吧!

99乘法表的實現,我相信很多人都知道怎么實現,無非是2個for循環得到的結果,這里我就不多做解釋,還不理解的同學可以仔細研究一下代碼,研究一下實現的原理,我在核心代碼那里寫一點小注釋,方便你理解:

 1      /*
 2             99乘法表的表達式是 i*j 如: 1*2 2*2
 3             所以第一個數從0-9,分別乘以0-9,就得到了99乘法表
 4         */
 5         //這里定義是為了記錄id的
 6         var cur = 0;
 7         //這里是第一位數
 8         for(var i=0;i<=9;i++){
 9             //這里是第二位數
10             for(var j=0;j<=i;j++){
11                 var sum = i*j;
12                 //這里創建div
13                 var Div = document.createElement("div");
14                 Div.id = cur ;
15                 Div.style.top = i*35 + 'px';
16                 Div.style.left = j*105 + 'px';
17                 cur++;
18                 //這里賦值
19                 Div.innerHTML = j+"*"+i+"="+sum;
20                 document.body.appendChild(Div);
21             }    
22         }

css樣式我就不寫了,分到的效果就是這樣的:

小學99乘法表,大家都很熟悉,那我們實現第二個功能,隔行變色,要求是用if和switch實現,那我們先用for來實現(這里用的3種顏色是:綠,灰,橙):

                var cur = 1;
		var bg = null;
		for(var i=0;i<=9;i++){
			for(var j=0;j<=i;j++){
				var sum = i*j;
				var Div = document.createElement("div");
				var num = "div" + cur;
				Div.id = num ;
				Div.style.top = i*35 + 'px';
				Div.style.left = j*105 + 'px';
				cur++;
				Div.innerHTML = j+"*"+i+"="+sum;
				document.body.appendChild(Div);
				var oDiv = document.getElementById(num); 
				if(cur%3 == 0){
					bg="green";
				}else if(cur%3 == 1){
					bg="grey";
				}else if(cur%3 == 2){
					bg="orange";	
				
				oDiv.style.backgroundColor= bg;
			}
		}        

  

實現效果是這樣的:

用switch方法實現:

                var cur = 1;
		var bg = null;
		for(var i=0;i<=9;i++){
			for(var j=0;j<=i;j++){
				var sum = i*j;
				var Div = document.createElement("div");
				var num = "div" + cur;
				Div.id = num ;
				Div.style.top = i*35 + 'px';
				Div.style.left = j*105 + 'px';
				cur++;
				Div.innerHTML = j+"*"+i+"="+sum;
				document.body.appendChild(Div);
				var oDiv = document.getElementById(num); 
				switch(cur%3){
					case 0 :
						bg="green";
						break;
					case 1 :
						bg="grey";
						break;
					case 2 :
						bg="orange";
						break;		
				}
				
				oDiv.style.backgroundColor= bg;
			}
		}    

  

實現效果是這樣的:

效果好像無差,哈哈,說來實現方法也是挺簡單的,現在看看移入表色是怎么做的,以switch判斷為例:

 1      var cur = 1;
 2         var bg = null;
 3         for(var i=0;i<=9;i++){
 4             for(var j=0;j<=i;j++){
 5                 var sum = i*j;
 6                 var Div = document.createElement("div");
 7                 var num = "div" + cur;
 8                 Div.id = num ;
 9                 Div.style.top = i*35 + 'px';
10                 Div.style.left = j*105 + 'px';
11                 cur++;
12                 Div.innerHTML = j+"*"+i+"="+sum;
13                 document.body.appendChild(Div);
14                 var oDiv = document.getElementById(num); 
15                 
16                 switch(cur%3){
17                     case 0 :
18                         bg="green";
19                         break;
20                     case 1 :
21                         bg="grey";
22                         break;
23                     case 2 :
24                         bg="orange";
25                         break;        
26                 }
27                 
28                 oDiv.style.backgroundColor= bg;
29             }
30         }
31         var oDiv = document.getElementsByTagName("div");
32         var len = oDiv.length;
33         for(var i=0;i<len;i++){
34             //鼠標移入
35             oDiv[i].onmouseover = function(){
36                 //第一種寫法,可以獲取行內樣式(用style包起來的),也可以獲取樣式表中的樣式,且值為計算過的
37                 //var defaultBg = getStyle(this,'background-color');
38                 //第二種寫法,只能獲取style包起來的行內樣式,值沒有經過計算
39                 var defaultBg = this.style.backgroundColor; //這里是為了存元素剛移入時的背景顏色
40                 this.style.backgroundColor = 'red';
41                 this.onmouseout = function(){
42                     this.style.backgroundColor = defaultBg;
43                 }
44             }    
45         }
46         //這里是獲取元素的樣式值,兼容性寫法
47         function getStyle(obj,attr){
48             if(obj.currentStyle){
49                 return     obj.currentStyle[attr];
50             }else{
51                 return getComputedStyle(obj,false)[attr];    
52             }    
53         }

得到的效果我就不截圖了,自行腦補,或者自己也寫一下,到此,所以的要求都寫完了!你以為真的到這里就完了嗎?按照我一貫的風格,當然沒有完,后面還有料!往下看:

 

你不覺得這個隔行變色有點奇怪嗎,確實是隔行變了色,如果是100*100的div,效果杠杠的,但是像99乘法表這樣的結果,我只能說呵呵,那能不能讓99乘法表實現像100*100的div那樣的隔行變色呢?咱們說工匠精神,就是要在乎這些細枝末節,寫寫看唄!

原理:100*100的div,如果我給每一個編一個號,用橫軸和縱軸表示,像這樣:

那我們就知道,什么數值對應什么顏色了,轉化成99乘法表就是這樣:

那,思路就來了,如果我給每個div加一個標記,表示他是第幾行的第幾列,我就知道他是什么顏色,那代碼就如下:

 1         var cur = 1;
 2             var bg = null;
 3             for(var i=0;i<=9;i++){
 4                 for(var j=0;j<=i;j++){
 5                     var sum = i*j;
 6                     var Div = document.createElement("div");
 7                     var num = "div" + cur;
 8                     Div.id = num ;
 9                     Div.style.top = i*35 + 'px';
10                     Div.style.left = j*105 + 'px';
11                     Div.setAttribute('abc',i+''+j);//核心代碼就是這里啦,給每一個div 自定義一個屬性abc,將坐標賦值給它
12                     cur++;
13                     Div.innerHTML = j+"*"+i+"="+sum;
14                     document.body.appendChild(Div);
15                 }
16             }
17             
18             var oDiv = document.getElementsByTagName("div");
19             for(var i=0;i<oDiv.length;i++){
20                 var val = oDiv[i].getAttribute('abc');//這里獲取自定義屬性的值
21                 //用這個值來判斷什么位置應該是什么顏色
22                 switch(val%3){ 
23                     case 0 :
24                         bg="green";
25                         break;
26                     case 1 :
27                         bg="grey";
28                         break;
29                     case 2 :
30                         bg="orange";
31                         break;        
32                 }
33                 oDiv[i].style.backgroundColor= bg;
34             }

得到的效果就是這樣的:

效果是不是棒棒噠,比上面的感覺還是舒服許多,所以,記住自定義屬性的強大功能,它能做很多棒棒噠事情,有時間,專門講講自定義屬性的牛X應用,哈哈!

工匠精神,我們再擴展一下,把上面的代碼稍微整理一下,做一個簡單的小封裝,就變成了一個求階乘的隔行變色的小應用,感覺瞬間變得:就這樣 feel 倍爽!

 1        function multiTable(m){
 2             var cur = 1;
 3             var bg = null;
 4             for(var i=0;i<=m;i++){
 5                 for(var j=0;j<=i;j++){
 6                     var sum = i*j;
 7                     var Div = document.createElement("div");
 8                     var num = "div" + cur;
 9                     Div.id = num ;
10                     Div.style.top = i*35 + 'px';
11                     Div.style.left = j*105 + 'px';
12                     Div.setAttribute('abc',i+''+j);//核心代碼就是這里啦,給每一個div 自定義一個屬性abc,將坐標賦值給它
13                     cur++;
14                     Div.innerHTML = j+"*"+i+"="+sum;
15                     document.body.appendChild(Div);
16                 }
17             }
18             
19             var oDiv = document.getElementsByTagName("div");
20             for(var i=0;i<oDiv.length;i++){
21                 var val = oDiv[i].getAttribute('abc');//這里獲取自定義屬性的值
22                 //用這個值來判斷什么位置應該是什么顏色
23                 switch(val%3){ 
24                     case 0 :
25                         bg="green";
26                         break;
27                     case 1 :
28                         bg="grey";
29                         break;
30                     case 2 :
31                         bg="orange";
32                         break;        
33                 }
34                 oDiv[i].style.backgroundColor= bg;
35             }
36         }
37         multiTable(9);

到此,該效果基本上就講的差不多了,你以為就這樣就完了嗎? 咳咳~~,是的,就這么完了,謝謝大家!

行文倉促,有講的不對的地方,或者是哪里有錯誤,請不吝賜教,及時指正,不勝感激!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM