2011-04-08 59 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