2011-04-08 22 views
1

我建立我自己的定製圖像幻燈片,這裏是迄今爲止代碼:變量重新分配的問題,剎車我的頭試圖瞭解

function slideSwitch() { 
    var images = new Array('Aerodynamics.jpg','ABC_news.jpg','yep.jpg'); 
    var currentImage = 0; 
    var newImage = 'url(images/'+images[currentImage]+')';  
    $('.inner_img').css('background-image',newImage).animate({opacity:1.0},4000,function(){ 
     if (currentImage != images.length-1){ 
      currentImage++; 
     } else { 
      currentImage = 0; 
     }; 
     $(this).animate({opacity:0.0},4000); 
    }); 
}; 

function interval(){ 
    setInterval(slideSwitch,1000); 
}; 

interval(); 

問題是,當時間間隔觸發slideSwitch()函數再次,變量newImage在第一次觸發時保持相同的值。你能告訴我我做錯了什麼。我也嘗試在函數外部放置變量,給了我相同的結果。

+0

@ user698074回滾該問題。請不要刪除代碼 – JohnP 2011-04-08 05:56:34

+0

@@ user698074請停止編輯您的問題!你只是爲最後一行刪除格式 – JohnP 2011-04-08 06:22:31

回答

1

這是因爲您每次調用它時都會在方法內部重新聲明var currentImage = 0;

要麼使用jQuery的.data() API將其存儲在相關的DOM元素或聲明它的方法外

var currentImage = 0; 

function slideSwitch() { 
    //code 
} 
0

拉currentImage你的slideSwitch功能,它應該工作的罰款。您的間隔正在呼叫:

var currentImage = 0; 

哪些權利重置它。

4

那個bc currentImage在每次函數被調用時都被賦值爲零。

你應該把currentImage到更大的範圍,並採取分配的功能之外slideSwitch

var currentImage = 0; 

function slideSwitch() 
{ 
    //same thing, but lose the line: var currentImage = 0 
} 

function interval() 
{ 
    //unchanged 
} 

interval(); 

順便說一句,以下塊:

if (currentImage != images.length-1){ 
    currentImage++; 
} 
else{ 
    currentImage = 0; 
}; 

可以simplfied到

currentImage = (currentImage + 1) % images.length; 
+1

+1! – 2011-04-08 06:05:47

+0

謝謝。它很高興被注意到= P – 2011-04-08 06:07:16

+0

我有一百萬個小技巧,我一直都這麼喜歡,我很少看到新技術。謝謝:) – 2011-04-08 06:09:49