setTimeOut,检测结束功能并激活

时间:2013-10-18 14:38:52

标签: jquery slider

使用这个小功能,我可以轻松移动滑块,我可以插入setTimeOut发送新循环等的时间

但是我有一个问题,你可以看到var时间,这个var表示运行其他时间setTimeOut的时间,如果你在动画中看到我有其他时间运行和显示在每个滑块,问题是iti动画完成时需要运行setTimeOut的时间,并创建动画之间的时间间隔,这个时候运行第一个滑块显示第二个等等,我不能显示每个滑块一对一

例如,运行第一个滑块,8秒后显示下一个滑块等

var time = 8000;

$(".im_" + id).slideDown().animate({
    height: "300px",
    width: "100%",
}, 1200).delay(4000).fadeOut(1000);

id = (id + 1) % imax;
setTimeout(function() {
    slider(id);
}, time);

我希望了解所有,谢谢,最诚挚的问候

4 个答案:

答案 0 :(得分:1)

您可以随时将其他时间设置为var delayTime = 4000等变量,然后将它们全部加在一起以获得您想要等待的实时时间:

timeOutDuration = additionalTime + delayTime + animationTime + fadeOutTime

additionalTime是你的8秒,并使用timeOutDuration而不是time作为setTimeout的持续时间

听到它的回音将是你最好的选择,但我并不完全明白你正在尝试做什么。

答案 1 :(得分:0)

jquery slidingown函数和animate函数都有回调函数。 不会重写

id = (id + 1) % imax;
setTimeout(function() {
    slider(id);
}, time);

as

function slide() {
    id = (id + 1) % imax;
    slider(id);
}

然后只是将该函数称为动画的回调?

If you're unaware of what a callback is

答案 2 :(得分:0)

正如我在评论中提到的,您可以通过等待上一个动画中的完整事件来运行下一个滑块。对于您的示例,第二个幻灯片(id)将在第一个动画完成后8秒运行。

var time = 8000;

function nextAnimation() {
    setTimeout(function() {
        id = (id + 1) % imax;
        slider(id);
    }, time);
}

$(".im_" + id).slideDown().animate({
    height: "300px",
    width: "100%",
}, 1200).delay(4000).fadeOut(1000, nextAnimation);

答案 3 :(得分:0)

您可以在div上<{3}}查看(更新)promise().done

var time = 8000;
var imax = 4

function slide(id, firstPass) {
    firstPass &= id !== imax;
    id = id % imax;
    var nextId = (id + 1);
    $(".im_" + id).slideDown().animate({
        height: "300px",
        width: "100%",
    }, 1200).delay(4000).fadeOut(1000);
    if (firstPass) 
        $(".im_" + id).promise().done(function () {
          setTimeout(function () {
              slide(nextId, firstPass);
          }, time)
    });
}


slide(0, true);