1. 程式人生 > >[js外掛開發教程]實現一個比較完整的開源級選項卡外掛

[js外掛開發教程]實現一個比較完整的開源級選項卡外掛

  在這篇文章中,我實現了一個基本的選項卡功能:請猛擊後面的連結>> [js外掛開發教程]原生js仿jquery架構擴充套件開發選項卡外掛.

  還缺少兩個常用的切換(自動切換與透明度漸變),當然有朋友會說,還有左右,上下等等,這些動畫會放在焦點圖(幻燈片)外掛系列.

  (自動切換,停止控制,透明度漸變 ) 效果預覽:

  自動切換的實現:

  這個思路很簡單,開啟定時器,讓選項卡的索引+1,加到4的時候(選項卡的長度)從0開始

  傳統做法:

  index = 0

  index++

  if ( index == 4 ) {

  index = 0

  }

  小技巧(估計很多人都沒有用過):

  var i = ( index + 1 ) % 4

  index為當前選中的選項卡 索引

  當index = 0,他下一張就是1, 通過上面的取餘操作,i = 1

  當index = 3,他下一張就是0, 通過上面的取餘操作,i = 0

  這種方法不需要判斷邊界,只需要一句程式碼。在實際開發中,把那個4替換成選項卡的長度

  好了,關鍵的思路和技巧有了,我們開始拼接框架了:成華區做陰莖延長手術好的醫院

  1 var defaults = {

  2 contentClass : 'tab-content',

  3 navClass : 'tab-nav',

  4 activeClass : 'active',

  5 triggerElements : '*',

  6 activeIndex : 0,

  7 evType : 'click',

  8 effect : 'none',

  9 auto : false,

  10 delay : 3000,

  11 duration : 1000

  12 };

  defaults引數,增加幾個配置:

  effect: none(沒有特效) / fade( 透明度切換 )

  auto: false(不會自動切換) / true ( 開啟自動切換 )

  delay : 多少時間 切換一個選項卡

  duration: 透明度開啟,這個才會用到,表示,多長時間內 完成透明度的切換

  1 if ( options.effect == 'fade' ) {

  2 tabContent.style.position = 'relative';

  3 for( var i = 0; i < tabContentEle.length; i++ ) {

  4 tabContentEle[i].style.position = 'absolute';

  5 }

  6 tabContentEle[opt.activeIndex].style.zIndex = _contentLen + 1;

  7 opt.delay += opt.duration;

  8 }

  當開啟透明度變化的時候,把選項卡元素設定成定位方式,當前選中的選項卡,層級為最高!!! ( 如果不是最高層級,那麼預設是最後一個選項卡在最上面,所以 “內容4” 就會在最上層,顯然不是我們想要的結果)層級+定位 這一招也很常用,經常用來做顯示隱藏,和透明度變化.成都治陽痿大概多少錢

  根據opt配置,判斷是否開啟了auto自動切換功能

  1 //是否自動播放

  2 if ( opt.auto ) {

  3 for( var i = 0 ; i < tabNavEle.length; i++ ){

  4 tabNavEle[i].index = i;

  5 tabNavEle[i].onmouseover = function(){

  6 _api.stop();

  7 _api.setIndex( this.index );

  8 };

  9 tabNavEle[i].onmouseout = function(){

  10 _api.start();

  11 _api.setIndex( this.index );

  12 };

  13 }

  14 _api.start();

  15 }

  如果開啟了,做兩件事情:

  1,呼叫start()函式,讓索引+1

  2,選項卡導航部分,新增事件控制 自動播放的暫停和開始

  start與stop方法?

  1 _api.stop = function(){

  2 timer && clearInterval( timer );

  3 };

  4

  5 _api.start = function(){

  6 _api.stop();

  7 timer = setInterval( function(){

  8 _api.next();

  9 }, opt.delay );

  10 };

  呼叫next方法,你應該猜得到next方法做的事情就是索引+1 吧

  1 _api.next = function(){

  2 var i = ( _index + 1 ) % _contentLen;

  3 _api.setIndex( i );

  4 };

  索引+1之後,再切換選項卡

  最後在setIndex方法:增加透明度變化

  2 tabContentEle[_index].style.zIndex = _contentLen + 1;

  3 for (var i = 0; i < tabContentEle.length; i++) {

  4 if (i != _index) {

  5 tabContentEle[i].style.zIndex = ( index + _contentLen - ( i + 1 ) ) % _contentLen + 1;

  6 tabContentEle[i].style.opacity = 1;

  7 }

  8 }

  9 animate(tabContentEle[_index], {'opacity': 0}, function () {

  10 tabContentEle[_index].style.zIndex = ( index + _contentLen - ( _index + 1 ) ) % _contentLen + 1;

  11 _index = index;

  12 });

  13 }

  完整的js程式碼有220行:作者:ghostwu, 出處:http://www.cnblogs.com/ghostwu