1

HTML:

<div id="foo"></div>

CSS:

#foo { width: 100px; height: 100px; background: #f00; }
.a { -webkit-transition: -webkit-transform 1s linear; -webkit-transform: translateY(100px); }
.b { -webkit-transition: -webkit-transform 1s linear; -webkit-transform: translateY(50px); }

JavaScript:

$(function () {
    var elm = $('#foo');

    var animate = function (className, callback) {
        elm.addClass(className);

        setTimeout(function () {
            elm.removeClass(className)

            callback();
        }, 1000);
    };

    animate('a', function () {
        animate('b');
    });
});

问题:

在第二次迭代期间,元素实际上是从先前翻译的 Y 移动的,而不是无翻译的元素状态。

使用关键帧会起作用,尽管这需要添加更多预定义的 CSS 类,这并不是一个真正的选择。

4

1 回答 1

0

我想出的可能解决方案是使用setTimeout.

$(function () {
    var elm = $('#foo');

    var animate = function (className, callback) {
        setTimeout(function () {
            elm.addClass(className);
        }, 0);

        setTimeout(function () {
            elm.removeClass(className)

            callback();
        }, 1000);
    };

    animate('a', function () {
        animate('b');
    });
});

两者的名称可以在http://jsfiddle.net/CP8An/http://jsfiddle.net/CP8An/1/看到。后者是期望的结果。

我不明白为什么setTimeout需要 - 毕竟,之前定义的类在调用回调之前被删除了。使用setTimeout似乎更像是一种解决方法而不是解决方案。这可能对正在处理类似问题的人有所帮助,尽管我仍然愿意接受其他建议。

于 2013-02-17T18:14:18.367 回答