代码之家  ›  专栏  ›  技术社区  ›  Pickels

jQuery延迟:加速队列?

  •  4
  • Pickels  · 技术社区  · 16 年前

    我有一个幻灯片,它基本上改变了图像的src属性,并淡入淡出。

    function startSlideshow() {
        if (i >= images.length) { i = 0 }
    
        var path = images[i].path;
        var name = images[i].name;
        i++;
    
        image.attr('src', path)
    
        image.animate({opacity:1}, 1000)
             .delay(5000)
             .animate({opacity:0}, 500, startSlideshow);
    }
    

    这很管用。

    <ul id="ImagePicker">
        <li>•</li>
        <li>•</li>
        <li>•</li>
    </ul>
    

    当你点击其中一个li项目时,幻灯片应该显示相应的图像。

    $('#ImagePicker li').click(function () {       
        image.stop(true, false)
             .animate({ opacity: 0 }, 10, startSlideshow);
    });
    

    问题是,它有时会被窃听,我不知道为什么会发生。如果你在淡出时点击(我想) .animate({opacity:0}, 500, startSlideshow) 它开始加速了。

    有人知道为什么会这样吗?

    实际上,它似乎是在延迟期间发生的,而不是在动画期间。

    我可以这样修,但感觉有点不舒服:

    image.animate({ opacity: 1 }, 1000)
         .animate({ opacity: 1 }, 5000)
         .animate({opacity:0}, 1000, startSlideshow);
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Pickels    16 年前

    问题与delay()有关,我通过执行以下操作解决了此问题:

    image.animate({ opacity: 1 }, 1000)
         .animate({ opacity: 1 }, 5000)
         .animate({opacity:0}, 1000, startSlideshow);
    

    http://api.jquery.com/delay/
    http://dev.jquery.com/ticket/6576

    希望有帮助。

        2
  •  0
  •   Brian Stoner    16 年前

    尝试使用setTimeout,而不是使用.delay。

    image.animate({opacity:1}, 1000, function(){
        setTimeout(image.animate({opacity:0}, 500, startSlideshow), 5000);
    });