JavaScript數字上下翻動變化詳解
分享一段程式碼例項,它實現了數字上下翻動變化效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> body { margin: 0; padding: 0; } .box { width: 200px; height: 200px; overflow: hidden; } .box .wrap { position: relative; top: 0; } .box .top-move { transition: top 0.6s ease; top: -200px; } .box span { display: block; width: 200px; height: 200px; line-height: 200px; text-align: center; color: #fff; font-size: 2.6em; } .box span:nth-of-type(1) { background: #999; } .box span:nth-of-type(2) { background: #666; } </style> <script> function move(obj) { this.el = document.getElementById(obj.el) || obj.el; this.list = this.el.getElementsByClassName(obj.list); var This = this; // 隨機資料 // len:隨機數的長度 // return array this.radom = function(len) { var random = []; for (var index = 0; index < len; index++) { random.push(Math.floor(Math.random() * 10)); } return random; } this.timeout = function(time, func) { var timer = setTimeout(function() { func(); }, time); } // 將值寫入dom this.setVal = function() { var arrNum = This.radom(2); if (arrNum.length === 0) return; for (var index = This.list.length - 1; index >= 0; index--) { This.list[index].innerHTML = arrNum[index]; } This.move(); This.timeout(600, function() { This.list[0].innerHTML = arrNum[1]; This.list[1].innerHTML = arrNum[0]; This.remove(); }); This.timeout(1600, This.setVal); } this.move = function() { This.el.className = "wrap top-move"; } this.remove = function() { This.el.className = "wrap"; } this.init = function() { This.setVal(); } } window.onload=function(){ new move({ el: "wrap", list: "list" }).init(); } </script> </head> <body> <div class="box"> <div class="wrap" id="wrap"> <span class="list">2</span> <span class="list">1</span> </div> </div> </body> </html>
上面的程式碼實現了我們的要求,下面詳細介紹一下它的實現過程。
一.程式碼註釋:
[CSS] 純文字檢視 複製程式碼body { margin: 0; padding: 0; }
設定bod的內邊距和外邊距,body的子元素也會繼承。
[CSS] 純文字檢視 複製程式碼.box { width: 200px; height: 200px; overflow: hidden; }
設定容器元素的尺寸,並且設定內部元素超出就會隱藏,這個很重要。
[CSS] 純文字檢視 複製程式碼.box .wrap { position: relative; top: 0; }
設定元素為相對定位,top屬性值為0px。
[CSS] 純文字檢視 複製程式碼.box .top-move { transition: top 0.6s ease; top: -200px; }
以動畫方式設定元素的top屬性值。
[CSS] 純文字檢視 複製程式碼.box span { display: block; width: 200px; height: 200px; line-height: 200px; text-align: center; color: #fff; font-size: 2.6em; }
將span元素設定為塊級元素,這樣的話就可以設定它的尺寸,span元素就會在新的一行顯示。
[CSS] 純文字檢視 複製程式碼.box span:nth-of-type(1) { background: #999; }
設定對應子元素的背景顏色。
[CSS] 純文字檢視 複製程式碼function move(obj) { //code }
此建構函式實現了翻動效果,引數是一個配置物件。
[JavaScript] 純文字檢視 複製程式碼this.el = document.getElementById(obj.el) || obj.el
獲取對應的元素物件,obj.el可以是一個id屬性值也可以直接是一個元素物件。
[JavaScript] 純文字檢視 複製程式碼this.list = this.el.getElementsByClassName(obj.list)
獲取指定的元素集合,在這裡也就是span元素集合。
[JavaScript] 純文字檢視 複製程式碼var This = this
將this賦值給變數This,因為在不同的上下文中this可能指向不同的物件。
[JavaScript] 純文字檢視 複製程式碼this.radom = function(len) { var random = []; for (var index = 0; index < len; index++) { random.push(Math.floor(Math.random() * 10)); } return random; }
獲取一個隨機數陣列。
[JavaScript] 純文字檢視 複製程式碼this.timeout = function(time, func) { var timer = setTimeout(function() { func(); }, time); }
對setTimeout定時器函式進行封裝。
[JavaScript] 純文字檢視 複製程式碼this.setVal = function() { //code }
將值寫入對應的元素。
[JavaScript] 純文字檢視 複製程式碼var arrNum = This.radom(2); if (arrNum.length === 0) return; for (var index = This.list.length - 1; index >= 0; index--) { This.list[index].innerHTML = arrNum[index]; }
將生成的隨機數寫入對應的span元素中。
[JavaScript] 純文字檢視 複製程式碼This.move()
呼叫此方法可以設定元素的樣式類,從來實現了動畫方式設定top值的功能。
[JavaScript] 純文字檢視 複製程式碼This.timeout(600, function() { This.list[0].innerHTML = arrNum[1]; This.list[1].innerHTML = arrNum[0]; This.remove(); });
css3動畫需要600毫秒完成;600毫秒之後,將兩個元素的內容對調,然後再恢復到元素原來的樣式類。
於是這樣就會讓元素位置恢復到預設,但是又由於對調了元素的內容,這樣起碼在外觀上實現了翻動效果。
二.相關閱讀
(1).transition可以參閱CSS3 transition一章節。
(2).:nth-of-type()可以參閱nth-of-type()一章節。
(3).getElementsByClassName()可以參閱getElementsByClassName()一章節。
(4).push()可以參閱javascript push()一章節。
(5).Math.floor()可以參閱javascript Math.floor()一章節。
(6).Math.random()可以參閱javascript Math.random()一章節。
(7).setTimeout()可以參閱setTimeout()一章節。
(8).innerHTML可以參閱innerHTML一章節。
(9).className可以參閱js className一章節。
相關文章
- JavaScript數字分頁效果詳解JavaScript
- JavaScript變數與資料型別詳解JavaScript變數資料型別
- JavaScript 事件迴圈詳解(翻譯)JavaScript事件
- vue 數字上下滾動抽獎Vue
- Python 關鍵字global全域性變數詳解Python變數
- JavaScript數字和字母組合驗證碼詳解JavaScript
- JavaScript格式化數字JavaScript
- 監聽滾動,上下翻頁
- JavaScript 中 this 關鍵字的作用和如何改變其上下文JavaScript
- 3.9 solidity變數詳解Solid變數
- 環境變數詳解變數
- 詳解Linux bash變數Linux變數
- 數字化改變生活,數字化具有什麼意義?
- Javascript currying柯里化詳解JavaScript
- JavaScript滑動門特效詳解JavaScript特效
- cmake兩種變數詳解變數
- JavaScript變數JavaScript變數
- JavaScript元素上下彈性運動JavaScript
- JavaScript函式柯里化詳解JavaScript函式
- 詳解Flask上下文Flask
- 手把手教你完成數字動態變化顯示效果
- JavaScript自定義滾動條詳解JavaScript
- .NET Core 環境變數詳解變數
- 智慧經營3.0都有哪些數字化變化?
- 在 Laravel 中將 PHP 變數轉化為 JavaScript 變數並輸出LaravelPHP變數JavaScript
- JavaScript進階-執行上下文棧和變數物件(一週一更)JavaScript變數物件
- JavaScript 宣告變數JavaScript變數
- JavaScript變數提升JavaScript變數
- javascript 變數物件JavaScript變數物件
- JavaScript this詳解JavaScript
- 閉包:私有化變數 《JavaScript高程3》 《JavaScript忍者祕籍》變數JavaScript
- JavaScript 動態進度條效果詳解JavaScript
- JavaScript自動更新時間效果詳解JavaScript
- Golang環境變數設定詳解Golang變數
- Cypress系列(14)- 環境變數詳解變數
- Less(v3.9.0)使用詳解—變數變數
- C語言可變引數詳解C語言
- python中變數的命名及詳解Python變數