jquery传输动画和.stop()fx队列

时间:2012-08-09 22:29:05

标签: jquery animation transition

首先,jQuery Transit摇滚。如果您还没有看到它,请查看http://ricostacruz.com/jquery.transit/并感到惊讶!

虽然有一个问题是,虽然它声称使用jQuery的特效队列,但似乎在大多数情况下,我无法使用jQuery的.stop()方法来处理它。

我在这里贴了一个小提琴:http://jsfiddle.net/nicholasstephan/sTpa7/

如果单击动画按钮,则使用标准jQuery .animate()将框慢慢移动到右侧。正如您所期望的那样,按下停止将停止动画。点击重置也会停止动画并将框放回到它开始的位置。

如果你点击过渡,它应该做同样的事情......但它没有......

这里发生了什么?有人知道解决方法吗?

感谢。

2 个答案:

答案 0 :(得分:4)

这是一个可行的解决方案。

尝试创建一个新的转换函数,该函数对额外的回调进行排队。动画通过停止后出现后,可以清除此回调。清除和跳过指令但是没有从旧的停止功能接收到。但我们可以为此创建一个新的停止功能。这只是在浏览器中输入并且完全未经测试

(function($){
    $.fn.stopableTransition = function (...){
        var skip = false
        var clear = false
        this.handle("stopTransition", function(doclear, doskip){
            skip = doskip; clear = doclear;
        })
        this.transition(...)
        this.queue(function(){
            if(skip){
               //todo: ensure animation is removed from css
               //todo: move object to where the animation would have finished
            } 
            else
            {
               //todo: ensure animation is removed from css
               //todo: make sure object stays at its current position
            }

            if(clear){
                skip = false
                clear = false
                $(this).clearQueue()
            }  
            else 
            { 
                skip = false
                clear = false
                $(this).dequeue()
            }

        })
    }
    $.fn.stopTransition = function (clear, skip){
        clear = (typeof(clear) === 'undefined') ? false : clear;
        skip = (typeof(skip) === 'undefined') ? false : skip;
        this.triggerHandler("stopTransition", [clear, skip])
        this.dequeue();
    }
})(jQuery)

答案 1 :(得分:0)

正如@Jason More所说,我在那个帖子中查找,我发现fork存在并且有一个名为transitionStop()的函数(并且为了清除所有剩余的动画,你也应该调用clearQueue()),但考虑到这个fork有一年前最后一次提交的事实,而且原来的TransitJS在3个月前有最后一次提交,也许你会错过使用该fork的一些功能。
但是对于我所需要的,这是最快的方式。