4

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

但是似乎不支持jquery 类型队列 API 。

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

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

4

2 回答 2

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
});
于 2013-06-22T02:51:33.677 回答
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 应该没什么大不了的。

干杯

于 2012-06-05T21:59:57.660 回答