2013-08-20 224 views
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'函數,這樣第二個清除函數會有正確的位置變量。

不幸的是,我找不到這樣的聽衆;任何人都可以指出我的方向是正確的,還是建議一種替代解決方案?

回答

0

您可能會中斷頁面​​中的事件流動,但您並非真的在動畫術語中「打斷」:動畫無法給您一個事件來告訴您Clear已被按下,我害怕。

如果您希望在用戶按下清除時停止動畫,您必須在用戶按下清除時手動停止動畫:Dojo無法自動檢測到兩件事之間存在任何關聯,很可能是其他動畫,即使用戶按下了「清除」,您仍想繼續播放。

因此,您可能需要在適當的時候調用.stop動畫。

+0

我很害怕這樣的事情...鑑於它被onclick事件調用,我無法將當前正在播放的anim變量傳遞給該函數,以便在新動畫開始之前停止。謝謝任何方式:) – Emma

+0

是的。正常的JavaScript關閉範圍規則適用。因此,例如,在原始問題的代碼示例中,您傳遞給連接的內部函數將從「清除」函數內的變量上下文中關閉,因此在該示例中,例如,您可以訪問「位置「和」清除「。絕對不是你不能從事件回調中訪問任何東西! –