0

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

但是我有一个问题,你可以看到 var time ,这个 var 表示运行其他时间 setTimeOut 的时间,如果你在动画中看到我有其他时间运行并在每个滑块中显示,问题是需要时间用于在动画完成时开始运行 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

4 回答 4

1

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

timeOutDuration = additionalTime + delayTime + animationTime + fadeOutTime

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

听起来,回调将是您最好的选择,但我不完全理解您要做什么。

于 2013-10-18T14:42:43.287 回答
0

你可以去promise().done查看(更新的)jsfiddle on divs

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);
于 2013-10-18T15:34:19.857 回答
0

jquery slidedown 函数和 animate 函数都有回调。改写不行吗

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

作为

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

然后只是调用该函数作为动画的回调?

如果您不知道什么是回调

于 2013-10-18T14:48:05.707 回答
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);
于 2013-10-18T14:50:13.690 回答