2013-05-11 80 views
2

這一直在困擾着我好幾天了。 。 。 所以我有這樣的佈局jQuery一次顯示5個列表

<div class='body1'> 
    <ul id='list1'> 
     <li class='heading'>Name</li> 
     <li>Name 1</li> 
     <li>Name 2</li> 
     <li>Name 3</li> 
    </ul> 
</div> 
<div class='body1'> 
    <ul id='list2'> 
     <li class='heading'>Name</li> 
     <li>Name 1</li> 
     <li>Name 2</li> 
     <li>Name 3</li> 
    </ul> 
</div> 
<div class='body1'> 
    <ul id='list3'> 
     <li class='heading'>Name</li> 
     <li>Name 1</li> 
     <li>Name 2</li> 
     <li>Name 3</li> 
    </ul> 
</div> 

,這是我的功能

function changePage(){ 
    var limit = 5; //number of list to show 
    var pages = $(".body1"); 
    var pageul = $(".body1 ul"); 
    if ($.cookie('pg') == null || $.cookie('pg') >= pages.length){ 
     $.cookie('pg', 0); // just the cookie to retain current div on display when refresh 
    } 
    var c = $.cookie('pg'); 
    $(pages).hide(); // hide all divs 
    $(pageul).find('li').hide(); // hide all list inside divs 
    $(pages[c]).fadeIn(2000); //fade in the page with index cookie 
    $(pages[c]).find('li:lt('+limit+')').fadeIn(2000); //fadein the lists 
    c++; //increment 
    $.cookie('pg', c); //then store as cookie 
    window.setTimeout(changePage, 10000); //run every 10 sec 
} 

什麼即時試圖做的是顯示在10秒間隔循環的所有div,但如果一個div有超過極限列表然後通過每10秒顯示5(限制)來分割列表,並且當到達最後一個時,然後繼續循環div。

我在正確的軌道上嗎?或者我需要一個不同的方法?

IM相當新的jQuery的所以請多多包涵

+0

'pageul'定義在哪裏? – 2013-05-11 13:28:44

+0

哎呀抱歉編輯:D – Cyr 2013-05-11 13:31:01

+0

jQuery本身不支持cookies。你是否在使用外部資源? – 2013-05-11 13:44:36

回答

0

現在工作,傻我所有我需要的是調用window.setTimeout(changePage,10000); after clearInterval大聲笑..

<div class='body1'> 
    <ul id='list1'> 
     <li class='heading'>Name</li> 
     <li>Name 1</li> 
     <li>Name 2</li> 
     <li>Name 3</li> 
    </ul> 
</div> 
<div class='body1'> 
    <ul id='list2'> 
     <li class='heading'>Name</li> 
     <li>Name 1</li> 
     <li>Name 2</li> 
     <li>Name 3</li> 
     <li>Name 4</li> 
     <li>Name 5</li> 
     <li>Name 6</li> 
     <li>Name 7</li>   
    </ul> 
</div> 
<div class='body1'> 
    <ul id='list3'> 
     <li class='heading'>Name</li> 
     <li>Name 1</li> 
     <li>Name 2</li> 
     <li>Name 3</li> 
    </ul> 
</div> 

function changePage(){ 
    var limit = 6; //number of list to show 
    var pages = $(".body1"); 
    if ($.cookie('pg') == null || $.cookie('pg') >= pages.length){$.cookie('pg', 0);} // just the cookie to retain current div on display when refresh 
    var c = $.cookie('pg'); 
    $(pages).hide(); // hide all divs 
    $(pages).find('li').hide(); // hide all list inside divs 
    $(pages[c]).fadeIn(2000); //fade in the page with index cookie 
    if($(pages[c]).find("ul li:not(.heading)").length > limit){ 
     $(pages).find('li:lt('+(limit+1)+')').fadeIn(2000); 
     var grpli = Math.ceil($(pages[c]).find("ul li:not(.heading)").length/limit); 
     var timesRun = 0; 
     var interval = setInterval(function(){ 
      timesRun += 1; //increment 
      gt = (limit*(timesRun+1))-5; 
      if(timesRun === grpli-1){clearInterval(interval); window.setTimeout(changePage, 10000);}else{window.clearTimeout(timer);} // fixed by calling setTime out again 
      $(pages).find('li:not(.heading)').hide(); //hide all lists again 
      $(pages).find('li:gt('+gt+'):lt('+gt+')').fadeIn(2000); //show 5 lists between gt and lt 
     }, 10000); 
    }else{ 
     $(pages[c]).find('li:lt('+limit+')').fadeIn(2000); 
    } 
    c++; //increment 
    $.cookie('pg', c); //then store as cookie 
    var timer = window.setTimeout(changePage, 10000); //run every 10 sec 
} 
changePage(); 
1

快速調試表明cString從cookie中檢索時。你不能用它作爲jQuery對象的索引,你首先需要將它解析爲一個整數。所以這條線:

var c = $.cookie('pg'); 

變爲:

var c = parseInt($.cookie('pg'), 10); // parseInt(string, radix) 

(基數是你又名基地10個工作中,在這種情況下十進制數字系統的基礎)。

> updated jsFiddle(我改變了限制8,使其更清晰)。我不知道jQuery是否支持一種方式來從一個字符串,但通過the docs似乎並不是這樣的情況下從jQuery對象中檢索第n個元素。

+0

它實際上工作,即使沒有parseInt ...我的代碼更新,它現在的工作,但只有最後一部分內部div,我的猜測是我打電話clearInterval或clearTimeout在錯誤的地方:< – Cyr 2013-05-12 22:36:58

+0

@Cyr唐當代碼的這麼大一部分發生變化時,下次再編輯你的問題。你剛剛離開我的答案,這不是我的錯。 – MarioDS 2013-05-13 07:05:52

+0

我沒有編輯我的問題,我在末尾加上了「更新:」。我編輯了這個功能,但是目標仍然是一樣的。除了你的答案已經從一開始就脫離了話題,因爲我的$ .cookie('pg')工作正常。 – Cyr 2013-05-13 08:41:07