JavaScript左右滑動切換的選項卡詳解
分享一段程式碼例項,它實現了選項卡切換效果。
通常的選項卡切換都是瞬時完成,本例是採用滑動切換的方式。
更多的選項卡效果可以查閱特效下載tab選項卡分類,這裡只是介紹實現原理。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> * { padding: 0; margin: 0; } .total { width: 500px; height: 500px; margin: 0 auto; } .tab { /*width: 100px;*/ height: 20px; } .tab li { width: 30px; height: 19px; text-align: center; float: left; list-style: none; border: 1px solid #ccc; border-bottom: none; cursor: pointer; } .tab .act { background-color: yellow; } .cont { width: 200px; height: 100px; position: relative; border: 1px solid #ccc; box-sizing: border-box; overflow: hidden; } .main { width: 800px; height: 100px; border: 1px solid #ccc; position: absolute; left: 0; top: 0; } .main div { width: 200px; height: 100px; float: left; background-color: red; box-sizing: border-box; } </style> <script type="text/javascript"> window.onload = function() { var tab = document.getElementById('tab'); var aLi = tab.getElementsByTagName('li'); var main = document.getElementById('main'); var aDiv = main.getElementsByTagName('div'); var len = aLi.length; main.innerHTML += main.innerHTML; main.style.width = aDiv[0].offsetWidth * aDiv.length + 'px'; var index = 0; for (index = 0; index < len; index++) { aLi[index].index = index; aLi[index].onclick = function () { for (index = 0; index < len; index++) { aLi[index].className = ""; } move((this.index) * 200, -10); aLi[this.index].className = 'act'; } } var timer = null; function move(destion, speed) { var main = document.getElementById('main'); clearInterval(timer); timer = setInterval(function() { if (main.offsetLeft == -destion) { clearInterval(timer); } else if (main.offsetLeft < -main.offsetWidth / 2) { main.style.left = 0; } else { main.style.left = main.offsetLeft + speed + 'px'; } }, 16) } } </script> </head> <body> <div class="total"> <ul id="tab" class="tab"> <li class="act">1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <div class="cont"> <div id="main" class="main"> <div>螞蟻部落一</div> <div>螞蟻部落二</div> <div>螞蟻部落三</div> <div>螞蟻部落四</div> </div> </div> </div> </body> </html>
上面的實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).window.onload = function() {},文件內容完全載入完畢再去執行函式中的程式碼。
(2).var tab = document.getElementById('tab'),獲取選項卡的容器元素。(3).var aLi = tab.getElementsByTagName('li'),獲取選項卡容器下面的所有li元素集合,也就是選項卡元素。
(4).var main = document.getElementById('main'),獲取選項卡內容的容器元素。
(5). var aDiv = main.getElementsByTagName('div'),獲取div元素集合,也就是內容元素。
(6).var len = aLi.length,獲取選項卡的數目。
(7).main.innerHTML += main.innerHTML,將man中的html內容複製一份,然後連線到一起,為了防止在滑動過程中出現空白現象;第二個目的也是為了後續的便於去臨界值計算。
(8).main.style.width = aDiv[0].offsetWidth * aDiv.length + 'px',設定main元素的寬度。
(9).var index = 0,宣告一個變數並賦初值為0。
(10).for (index = 0; index < len; index++) ,通過for迴圈批量註冊事件處理函式。
(11).aLi[index].index = index,為指定索引的元素新增自定義屬性index並賦初值為index。
(12).aLi[index].onclick = function () {},註冊click事件處理函式。
(13).for (index = 0; index < len; index++) {
aLi[index].className = "";
},清空元素的class屬性值。
(13).move((this.index) * 200, -10),實現左右滑動效果。
(14).aLi[this.index].className = 'act',給當前索引的選項卡新增指定樣式類,也就是背景會變黃色。
(15).var timer = null,宣告一個變數並賦初值為null,用作定時器函式的標識。
(16).function move(destion, speed) ,第一個引數規定移動的尺寸,第二個參數列示移動的速度。
(17).var main = document.getElementById('main'),獲取元素物件。
(18).clearInterval(timer),停止定時器函式的執行,這是為了防止連續快速點選選項卡,導致定時器函式重疊效果。
(19).timer = setInterval(function() {},10),每隔10毫秒執行一次回撥函式。
(20).if (main.offsetLeft == -destion) {
clearInterval(timer);
} ,因為傳遞的引數speed是負數,那麼就是向左滾動。
如果offsetLeft屬性值等於-destion,那麼就說明已經完成了切換動作,就停止定時器函式的執行。
(21).else if (main.offsetLeft < -main.offsetWidth / 2) {
main.style.left = 0;
},如果值小於main.offsetWidth / 2,說明已經向左滾動超過一個完整的選項卡內容列表。
那麼就重置main的left屬性值為0。
(22).else {
main.style.left = main.offsetLeft + speed + 'px';
},滑動效果。
二.相關閱讀:
(1).document.getElementById()參閱document.getElementById()一章節。
(2).getElementsByTagName()參閱document.getElementsByTagName()一章節。
(3).innerHTML參閱innerHTML一章節。
(4).offsetWidth參閱js offsetWidth一章節。
(5).className參閱js className一章節。
(6).clearInterval()參閱clearInterval()一章節。
(7).setInterval()參閱window.setInterval()一章節。
(8).offsetLeft參閱offsetleft一章節。
相關文章
- js內容左右滑動切換的選項卡程式碼例項JS
- js左右滑動選項卡效果程式碼例項JS
- 滑鼠虛滑過選項卡切換效果程式碼例項
- JavaScript選項卡效果詳解JavaScript
- javascript tab選項卡效果詳解JavaScript
- MVVM框架下實現左右滑動切換tabMVVM框架
- CSS3 tab選項卡動態切換CSSS3
- 如何實現選項卡切換
- CollectionView 單個選項卡的滑動View
- javascript選擇項相互移動切換效果JavaScript
- tab選項卡切換例項程式碼
- JavaScript左右拖動滑動的按鈕效果JavaScript
- javascript實現tab選項卡過程分解詳解JavaScript
- jQuery選項卡切換圖片效果程式碼例項jQuery
- jquery tab選項卡詳解jQuery
- 成品直播原始碼,點選滑動切換效果原始碼
- JavaScript滑動門特效詳解JavaScript特效
- uniapp 滑動切換APP
- MY_GEEK_MYMENU--左右切換選單
- javascript tab選項卡JavaScript
- vue路由切換滑動效果Vue路由
- jQuery tab選項卡程式碼詳解jQuery
- ViewPager 禁止左右滑動完美解決Viewpager
- JavaScript 側欄選項卡JavaScript
- JavaScript tab選項卡效果JavaScript
- JavaScript tab選項卡功能JavaScript
- JN專案-切換選項卡顯示隱藏問題
- flutter好用的輪子推薦五-列表左右滑動帶出按鈕選項Flutter
- jQuery滑鼠滑過表格標題切換表格內容詳解jQuery
- 左右迴圈滑動的viewpagerViewpager
- JavaScript實現選項卡效果JavaScript
- web前端仿手機左右滑動(手滑+自動滑動)Web前端
- ubuntu命令切換滑鼠左右鍵Ubuntu
- 仿淘寶tabBar點選及滑動時logo和火箭?切換動畫tabBarGo動畫
- 點選左右箭頭可以移動選項例項程式碼
- CSS實現頁面切換時的滑動效果CSS
- android的左右側滑選單實現Android
- 直播商城原始碼,產品之間來回切換,選項卡之間的位移原始碼