如何淡出淡出?

时间:2012-08-21 11:06:15

标签: javascript jquery

我想改进这段代码,让每张图片独立出现并淡出淡出。

这个问题面临一个问题,即快速迭代,所以只出现最后一张图像并进行淡出。

jQuery.each(
slidesArray, function (index, value) {

   var linkHref = value[1];
   var imageSource = value[0];;


   $("#slider").html("<a href='" + linkHref + "'><img src='" +
                     imageSource + "'></a>").fadeOut(5000);

});
你能帮帮我吗?请注意,图像应分别进行动画处理。

3 个答案:

答案 0 :(得分:0)

这是一个有用的小jQuery插件:

jQuery.slowEach = function( array, interval, callback ) {
    if( ! array.length ) return;
    var i = 0;
    next();
    function next() {
        if( callback.call( array[i], i, array[i] ) !== false )
            if( ++i < array.length )
                setTimeout( next, interval );
    }
};
jQuery.fn.slowEach = function( interval, callback ) {
    jQuery.slowEach( this, interval, callback );
};

包含上面的插件。它添加了slowEach方法和函数:$(...).slowEach(interval,callback)$.slowEach(interval,delay,callback)。它遍历一个对象或jQuery选择,在每次迭代后等待delay毫秒 从上面编辑代码以使用slowEach

jQuery.slowEach(
slidesArray, 5000, function (index, value) {
  var linkHref = value[1];
  var imageSource = value[0];
   $("#slider").html("<a href='" + linkHref + "'><img src='" + imageSource + "'></a>").fadeOut(5000);
});

答案 1 :(得分:0)

我没有对此进行测试,但理论上应该可行

function fader(i){
    $("#slider").css('display', '');
    if (i == slidesArray.length){
        return;
    }
    var linkHref = slidesArray[i][1];
    var imageSource = slidesArray[i][0];
    i++;
    $("#slider").html("<a href='" + linkHref + "'><img src='" +
                      imageSource + "'></a>").fadeOut(5000, fader(i));
}
fader(0);

编辑:我已经测试过,似乎正在运行。这是一个similar use demo

请注意,无需使用setTimeout

答案 2 :(得分:-1)

每当你拨打$(&#34;#slider&#34;)。html(),你就会替换#slider的内容。

你想要做的事情不是延迟实际的循环,你想要延迟图像的放置[和淡化]。你可以使用setTimeout这样做:

jQuery.each     (         slidesArray,函数(指数,值)         {

        var linkHref = value[1];
        var imageSource = value[0];;

        setTimeout(function() {
             $("#slider").html
             (
                "<a href='" + linkHref + "'><img src='"+ imageSource + "'></a>"
             ).fadeOut(5000);
        }, 2000 * index);
    }
);