0

使用 dojo.fx 动画时是否有等效的“中断”功能?

在我的网站上,我通过将 div 从屏幕上向左滑动然后清除 innerHTML 来清除一个区域。为了让 div 可以在同一个地方使用,我将它的最终位置设置为等于它的原始位置(尽管它是空的并且不可见,所以用户看不到)。我通过在触发函数时引用位置来避免对位置进行硬编码来做到这一点。

function clear (node) {

    // get the current position
    var position = domGeom.position (node, true);

    // slide the calendar off the screen
    var anim = dojo.fx.slideTo ({
        node: node,
        left: -2000,
        unit: "px"
    });

    // attach on onEnd function
    dojo.connect (anim, "onEnd", function (n1, n2) {

        node.innerHTML = "";

        // Reset the node's position
        domStyle.set (node, "left", position.x + "px");
    });

    anim.play();
}

问题在于,如果用户在函数运行时单击“清除”,例如,如果他们不小心双击,那么“位置”变量会采用动画中节点的值。如果我稍后将某些内容放入节点中,则说明它位于错误的位置,或者有时完全不在屏幕上。

我想做的是为动画添加一个监听器,这样如果它被中断,它会停止动画并立即执行“onEnd”函数,这样第二个清除函数就会有正确的位置变量。

不幸的是,我找不到这样的听众;谁能指出我正确的方向,或提出替代解决方案?

4

1 回答 1

0

您可能会打断页面中的事件流,但在动画方面您并没有真正“打断”:恐怕动画不可能给您一个事件来告诉您 Clear 已被按下。

如果您希望在用户按下 Clear 时停止动画,则必须在用户按下 Clear 时手动停止动画:Dojo 无法自动检测到两者之间有任何联系,而且确实可能​​还有其他即使用户确实按了清除,您也希望继续的动画。

因此,您可能希望在适当的时候对动画调用.stop 。

于 2013-08-20T14:41:30.717 回答