2011-04-10 48 views
1

我是Stack Overflow的新手,所以如果我完全做了一些我不应该做的事情,请让我知道,这样我就可以学习了。如果在setInterval中的语句只能工作一次

无论如何!代码:

$(document).ready(function() {  
    var imgWidth = $(".window").width(); 
    var imgSize = $(".image_reel img").size(); 
    var imgReelWidth = imgWidth * imgSize; 


    $(".image_reel").css({ 
     width: imgReelWidth}); 

    var num = 960; 
    var numImgs = $('div.image_reel img').length; 
    var currentSlide = 0; 

    setInterval(function() {  
     currentSlide++; 

     if (currentSlide != numImgs) { 
      $(".image_reel").animate({ 
       left: -num 
      }, 1000); 
     } 
     else { 
      var setWidth = numImgs - 1; 
      var newSlideNum = num * setWidth; 
      $(".image_reel").animate({ 
       left: newSlideNum 
      }, 1000); 
      currentSlide = 0;  
     } 
    }, 2000); 
}); 

这段代码是应该做的(或至少我认为这是...)是一种通过if语句和2秒,它将循环后检查“当前幻灯片“等于图像的数量。现在,我使用alert函数进行了检查,看看所有的数字是否都是正确的,但是由于某种原因,滑块只能工作一次,就是这样。任何想法为什么?

在此先感谢你们。

+0

只是作出适当的变量全球的:'window.numImgs = $( 'div.image_reel IMG')长;'和'窗口。 currentSlide = 0;否则就像Blender所说的那样,它们是匿名'就绪'函数的局部变量。 – 2011-04-10 14:51:46

+0

@ShadowWizard:他们是局部变量是有帮助的,没有问题(欢呼关闭!);他们没有被自动更新可能会有问题。 (或者,封闭函数是否匿名是否有区别?) – 2011-04-10 16:14:05

+0

@Tomalak好点,因为'setInterval'函数位于声明的函数内部,它应该能够识别这些局部变量。哦,好吧.. :) – 2011-04-10 17:29:14

回答

0

这可能是你的问题:

var numImgs = $('div.image_reel img').length; 

这个拥有图像的数量它叫,不叫它每一次的时刻。在你的代码替换numImgs$('div.image_reel img').length,看看它的工作原理:

$(document).ready(function() { 
    var imgWidth = $(".window").width(); 
    var imgSize = $(".image_reel img").size(); 

    $(".image_reel").css('width', imgWidth * imgSize); 

    var num = 960; 
    var currentSlide = 0; 
    var setWidth = 0; 
    var newSlideNum = 0; 

    setInterval(function() { 
     currentSlide++; 

     if (currentSlide < $('div.image_reel img').length) { 
      $(".image_reel").animate({left: -num}, 1000); 
     } else { 
      setWidth = numImgs - 1; 
      newSlideNum = num * setWidth; 
      $(".image_reel").animate({left: newSlideNum}, 1000); 
      currentSlide = 0; 
     } 
    }, 2000); 
}); 
+0

谢谢你,但它没有做到这一点,它仍然旋转一次,它停止。奇怪的是,“CurrentSlide”的计数仍然在增加,当它达到相同的数量时,它会旋转回第一张幻灯片,但由于它不旋转,它会旋转至空白点。 – Majed 2011-04-10 14:33:17

+0

这可能是一个可变的问题。你在函数中声明了'newSlideNum',但是这个函数被多次调用。这意味着这些变量会丢失。我重新在全球范围内宣布他们,所以看看是否有帮助。 – Blender 2011-04-10 14:40:54

+0

不幸的是,这也没有帮助。这阻止了滑块一起工作。 – Majed 2011-04-10 14:54:58