使用zepto,是不是可以对动画进行排队?

Posted

技术标签:

【中文标题】使用zepto,是不是可以对动画进行排队?【英文标题】:using zepto, is it possible to queue animations?使用zepto,是否可以对动画进行排队? 【发布时间】:2012-02-16 07:16:15 【问题描述】:

zepto.js 有一个用于动画元素的 API,它允许包含一个“完成”回调函数。 animate source

但是 jquery type queue API 似乎不受支持。

我想知道是否有使用 zepto 创建动画序列的内置方法,或者我应该只是从某个地方捏一个队列函数?

“完成”回调也不传递任何参数,因此知道您处于动画序列的哪个阶段有点难看 - 也许有解决方法?

【问题讨论】:

【参考方案1】:

您可以传递给 zepto 的 anim(ate) 函数的回调仅在动画完成时调用。

假设在回调期间css属性与传入的相同。因此,如果您不直接传入它们,则可以重用该对象。

此外,在回调中,您始终可以使用$.fn.css 函数来获取当前样式,尽管这可能不是最高效的方式。

关于排队,使用动画回调,您可以通过使用嵌套回调调用 $.fn.anim 来构建基本队列。

$('div').animate(width: 200, 1000, "linear", function()

    $(this).animate("background-color": "red", 300, "ease-in", function() 
        var $this = $(this),
            width = $this.css("width"); // will be "200px"

        $this.animate(height: 300, 1000, "linear");
    );

);

如果您想要或需要更高级的队列,将 jQuery 队列作为插件移植到 zepto 应该没什么大不了的。

干杯

【讨论】:

【参考方案2】:

我不确定你是否会觉得它有帮助,但我写了一个小插件来排队 zepto 动画:

$.fn.queueAnim = function (steps, callback) 
  var $selector = this;

  function iterator(step) 
    step.push(iterate);
    $selector.animate.apply($selector, step); 
  

  function iterate() 
    if (!steps.length) return callback && callback();

    var step = steps.shift();
    iterator(step);
  

  iterate();

示例用法:

$('div').queueAnim([
  [  'rotate': '15deg' , 200, 'ease-out' ],
  [  'rotate': '-13deg' , 300, 'ease-out' ],
  [  'rotate': '10deg' , 400, 'ease-out' ],
  [  'rotate': '0deg' , 500, 'ease-out' ]
], function () 
  // all done
);

【讨论】:

以上是关于使用zepto,是不是可以对动画进行排队?的主要内容,如果未能解决你的问题,请参考以下文章

如何为手动“动画”重新排队对 UIView drawRect 的请求

jQuery动画延迟问题与自排队循环的步骤

Glide 是不是对每个图像请求进行排队?滚动时Recyclerview加载非常慢

jQuery.when() 是不是对这些函数调用进行排队?

前端知识点总结——jQuery(下)

JMS 是不是可以“公平排队”