首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery多动画及其进度跟踪

jQuery多动画及其进度跟踪
EN

Stack Overflow用户
提问于 2013-03-11 23:54:05
回答 3查看 182关注 0票数 0

我正在写一个带有许多动画的脚本,这些动画以不同的顺序并行出现。根据在网页上单击的内容,使用一组特定的动画。这些函数被重用,并且并不是每次都以相同的顺序出现。

当用户在没有完成第一组动画的情况下单击另一个元素时,问题就出现了。在这种情况下,脚本会中断并无法按预期运行。这显然是因为进程没有完成,并且开始执行另一组动画。

我的问题是,是否有任何实践来识别动画当前是否正在运行,以防止在当前动画集完成之前执行另一组动画。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-11 23:57:37

您可以使用:animated选择器:

代码语言:javascript
复制
if ($("yourSelector:animated").length > 0) {
    // Some of the elements matching 'yourSelector' are still being animated.
}

或者,可以在开始新动画之前调用finish(),以强制当前动画立即完成:

代码语言:javascript
复制
$("yourElement").finish().animate({
    // The properties to animate...
});
票数 1
EN

Stack Overflow用户

发布于 2013-03-12 00:40:22

如果只想在开始新动画之前确保与特定元素关联的动画正常完成,可以使用.queue()函数。See my example on jsFiddle

代码语言:javascript
复制
$( function() {
    $(".clicker").on("click", function() {
        var self = $(this);
        self.queue( function(next) {
            self.animate({left:"+=100"}, 1000); // Replace with your animation
            next();
        });
    });
});

Read more about the queue function on api.jquery.com

票数 1
EN

Stack Overflow用户

发布于 2013-03-12 01:18:54

jQuery还有一个隐藏的公开变量,名为$.timers,它包含当前动画的所有内容的数组/等。这在速度上是令人难以置信的快,在性能上你不会想在$('*').is(':animated')中循环,以测试页面上的任何东西是否在移动。

我已经创建了一个小函数,它一遍又一遍地循环一个间隔,直到它们都完成,然后执行一个回调函数。

代码语言:javascript
复制
function isPageAnimated (_func) {    
    var testAnimationInterval = setInterval(function () {
        if ($.timers.length === 0) { // any page animations finished
            clearInterval(testAnimationInterval);
            _func(); // callback function
        }
    }, 100);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15342982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档