Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JQuery.animate()在上一个任务即将结束时开始?_Jquery_Jquery Ui_Jquery Animate - Fatal编程技术网

使用JQuery.animate()在上一个任务即将结束时开始?

使用JQuery.animate()在上一个任务即将结束时开始?,jquery,jquery-ui,jquery-animate,Jquery,Jquery Ui,Jquery Animate,当第一部动画即将结束时,我正在尝试开始一部新的动画。 我知道如何在前一个任务完全结束后开始新的任务: $("#clickme").click(function () { $("#book").animate({ opacity: 0.25, left: "+=50", height: "toggle" }, 5000, function () { // Animation complete. }); });

当第一部动画即将结束时,我正在尝试开始一部新的动画。 我知道如何在前一个任务完全结束后开始新的任务:

$("#clickme").click(function () {
    $("#book").animate({
        opacity: 0.25,
        left: "+=50",
        height: "toggle"
    }, 5000, function () {
        // Animation complete.
    });
});
因此,如果动画比在3秒内开始第二个动画要花5秒(或类似的时间)

添加延迟,可能吗

$("#book").animate({
    opacity: 0.25,
    left: "+=50",
    height: "toggle"
}, 5000).delay(3000).fadeOut();

获得一点新奇的pancy并创建一个自定义动画方法,允许您在调用回调之前指定延迟,而不是在动画完成后调用它。
它仍然基于动画的完成,因此它比仅使用超时更可靠

$.fn.Ani = function(props, duration, callback, delay_callback) {
    return (function(elem) {
        var calledBack = false;
        return elem.animate(props, {
            progress: function(o, elapsed) {
                var per = (delay_callback / duration).toFixed(2),
                    ela = elapsed.toFixed(2);

                if (ela > per && !(calledBack)) {
                    calledBack = true;
                    callback(ela);
                }
            },
            duration: duration
        });
    })(this);
}
你可以像这样使用它:

$("#clickme").click(function () {
    $("#book").Ani({
        opacity: 0.25,
        left: "+=50",
        height: "toggle"
    }, 5000, function(triggered_at) { // animation duration  = 5000
        console.log(triggered_at) // shows the percentage when callback triggered
    }, 3000); // delay before triggering callback = 3000
});