在javascript中使用三个div淡入和淡出循环

时间:2013-08-14 15:18:21

标签: javascript jquery html fadein fadeout

我用过这个 http://jsfiddle.net/3KydB/ 并尝试将其修改为3个div:

window.switchIn = function () {
    $('.chart_1').fadeToggle(function() {
        $('.chart_2').fadeToggle(function() {
            $('.chart_3').fadeToggle(function() {
                setTimeout(function() {window.switchOut();}, 6000);
            });
         });
    });

}

window.switchOut = function () {
  $('.chart_3').fadeToggle(function() {  
    $('.chart_2').fadeToggle(function() {
        $('.chart_1').fadeToggle(function() {
            setTimeout(function() {window.switchIn();}, 6000);
        });
      });  

    });

}

setTimeout(function() {window.switchIn();}, 6000)

第一个淡入淡出,然后第二个渐弱,第三个渐弱,然后回到第一个等等。

1 个答案:

答案 0 :(得分:-1)

我认为您需要以下内容:http://jsfiddle.net/mEeAt/

window.switch1 = function () {
    $('.chart_3').fadeToggle(function() {
        $('.chart_1').fadeToggle(function() {
            setTimeout(window.switch2, 6000);
        });
    });

}

window.switch2 = function () {
    $('.chart_1').fadeToggle(function() {
        $('.chart_2').fadeToggle(function() {
            setTimeout(window.switch3, 6000);
        });
    });
}

window.switch3 = function () {
    $('.chart_2').fadeToggle(function() {
        $('.chart_3').fadeToggle(function() {
            setTimeout(window.switch1, 6000);
        });
    });
}

setTimeout(window.switch2, 6000)

因此,每个函数负责淡出活动元素,淡入下一个元素,并为循环中的下一个函数设置超时。

当然这里有很多重复的代码,所以你可能最好创建一个函数来使它更通用:http://jsfiddle.net/mEeAt/1/

function cycle(delay) {
    var elements = Array.prototype.slice.call(arguments, 1);
    var functions = [];
    for (var i = 0; i < elements.length; i++) {
        functions.push(function (i) {
            var prev = i === 0 ? elements.length - 1 : i - 1;
            var next = (i + 1) % elements.length;
            return function() {
                elements[prev].fadeToggle(function() {
                    elements[i].fadeToggle(function() {
                        setTimeout(functions[next], delay);
                    });
                });
            };
        }(i));
    }
    functions[1]();  // start cycle by fading in the second element
}
cycle(6000, $('.chart_1'), $('.chart_2'), $('.chart_3'));