2011-08-18 44 views
0

我使用懸停功能和鼠標懸停一個setInterval函數開始工作 和onmouseout我清除setInterval函數盤旋相關的問題和setInterval

我的代碼如下:

----已更新---- 對於slideShow,我有一個div名稱divForImages和我.append()在特定的div新圖像。我使用.append()函數。 我的算法非常簡單: Fade使用Fadein函數,可以將前一張圖像和.append()新圖像合併。 因此,新的更新版本:

var IntervalID;  

$("li").hover(
      function() {               
        IntervalID = setInterval(function() { 
            //a slideshow begins to auto play... 

         $(".divForImages img").fadeOut(1000); //previous image 

         var item = $('<img src="'+attribute_of_href+'" width="200" height="100" style="left:0px;top:0px;position:absolute" />').css({"display":"none"}); //new image that is going to be faded in 
         $(".divForImages").append(item);/* new */ 

         item.fadeIn(1000); 
            }, 4000); 
         }, 
      function() {     
        clearInterval(IntervalID); 
         }); 

我已經定義了幾個毫秒4000 的問題是,當我FIRST mousover李,幻燈片沒有開始 立即自動播放,但它等待持續4秒!

當然,我已經定義了時間4000秒

,我可以讓setInterval的立即開始當我將鼠標放置,而不是等待4000毫秒?

感謝,提前

回答

0

您需要使用settimeout代替setinterval

瞭解更多檢查setinterval vs settimeout

+0

這仍然將導致其等待'4000ms'它激發之前,但這時它只會觸發一次。 OP想要一個幻燈片顯示的時間間隔。 – user113716

+0

感謝您的鏈接,但settimeout只觸發一次,我需要setInterval功能的圖像自動播放 – programmer

+0

帕特里克dw你是正確的,所以我看到@Mrchief是好的,在這兩種情況下,如果他使用setinterval或setimeout –

0

當然,只是名稱的功能,立即調用它,並將它通過返回其自身名稱爲setInterval()

var IntervalID; 
var slideshow = function() { 
     //a slideshow begins to auto play... 
    return slideshow; // <-- the return value lets you invoke and pass it. 
}; 

$("li").hover(function() { 
    IntervalID = setInterval(slideshow(), 4000); 
}, function() { 
    clearInterval(IntervalID); 
}); 

例子:http://jsfiddle.net/Hgwt8/

+0

感謝編碼,它實際上工作!但我有一個輕微的問題,它太快了!想象一下,我有一個幻燈片,當我第一次mouseover我想念第一個圖像,因爲它立即迭代到第二個。你認爲我將在這種情況下使用settimeout,因爲@Amr_ElGarhy說爲了推遲這一點?可以這樣做嗎? – programmer

+0

@programmer:你的代碼必須存在一些其他問題,或許有一個起始索引號。您需要發佈實際的代碼才能確定。 – user113716

+0

嗯,也許你是對的,因爲我在幻燈片放映中使用了fadeIn和fadeOut,並且我這樣做: – programmer

1

試試這個:

function playSlideShow() { 
    //a slideshow begins to auto play... 
} 

$("li").hover(
    function() {  
      playSlideShow(); // start playing immediately   
      IntervalID = setInterval(playSlideShow, 4000); 
    }, 
    function() {     
      clearInterval(IntervalID); 
    }); 
+0

,這段代碼也在工作! – programmer