1

我有可变数量的要执行的异步事件。我希望在他们全部完成后能够采取进一步的行动。下面的代码片段显示了我尝试使用 jquery 延迟对象调用事件。有人可以帮忙吗?(我知道代码不会按原样运行)。bubble.transitionTo 是异步事件。警报(“完成”);在异步回调完成之前调用,实际上是在它们执行之前。

var events = [];
    for (var i = 0; i < stageBubbles.length; i++) {
        var element = stageBubbles[i];
        var bubble = new Object();
        bubble = this.dataPointLayer.get('#' + element.name)[0];
        bubble.setOpacity(0.5);
        events.push(bubble.transitionTo({
            x: element.x,
            y: element.y,
            radius: element.radius,
            duration: 3,
            easing: 'ease-in',
            callback: function () {

            }
        }));
    }
    $.when.apply(this, events).done(function () { alert('complete'); });
4

1 回答 1

0

这个 transitionTo 函数在哪里定义?我在任何 jQuery 项目的文档中都找不到它。很可能是它没有实现 $.Deferred 方法。

如果我的假设是正确的,你可以尝试这样的事情。

 showBubbles = function (stageBubbles) {
        var events = [],
            deferred = $.Deferred(),
            completedCount = 0;

        for (var i = 0; i < stageBubbles.length; i++) {
            var element = stageBubbles[i];
            var bubble = new Object();
            bubble = this.dataPointLayer.get('#' + element.name)[0];
            bubble.setOpacity(0.5);
            bubble.transitionTo({
                x: element.x,
                y: element.y,
                radius: element.radius,
                duration: 3,
                easing: 'ease-in',
                callback: function () {
                    completedCount += 1;
                    if (completedCount == stageBubbles.length) {
                        deferred.resolve();
                    }
                }
            });
        }
        return deferred.promise();
    };
    $.when(showBubbles.call(this, stageBubbles)).done(function () { alert('complete'); });

此函数返回一个延迟对象,该对象在为所有气泡调用回调时解析。

于 2012-12-07T11:37:40.550 回答