【问题标题】:dojo animation on interrupt?打断道场动画?
【发布时间】:2013-08-20 14:20:24
【问题描述】:

在使用 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”函数,这样第二个清除函数就会有正确的位置变量。

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

【问题讨论】:

    标签: animation dojo interrupt


    【解决方案1】:

    您可能会中断页面​​中的事件流,但在动画术语中您并没有真正“中断”:动画不可能给您一个事件来告诉您清除已被按下,我是害怕。

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

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

    【讨论】:

    • 我害怕这样的事情......鉴于它是由 onclick 事件调用的,我无法将当前正在播放的 anim 变量传递给函数,以便它可以在之前停止新动画开始。无论如何谢谢你:)
    • 是的。正常的 JavaScript 闭包范围规则适用。因此,例如,在原始问题的代码示例中,您传递给 connect 的内部函数在“clear”函数内部的变量上下文中被关闭,因此在该示例中,例如,您可以同时访问 @ 987654322@ 和clear。绝对不是你不能从事件回调中访问任何东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多