2016-04-27 29 views
0

我已經創建了非常容易的畫廊。元素得到他們的變換位置或增加使用防止函數調用,直到標誌設置爲真

function pushIt(max, target, index, count) { 

    if (count == max) { 
     target[index -1].addEventListener("transitionend",turnOf,false); 
     return; 
    } 

    var tmp     = target[index]; 
    var matrix    = window.getComputedStyle(tmp).getPropertyValue("transform"); 
    var translate_left  = matrix.split(",")[4]; 
    var translate_top  = matrix.split(",")[5].split(")")[0]-215; 
    tmp.style.transform  = "translate3d(" + translate_left + "px," + translate_top + "px,0)"; 
    setTimeout(function(){ 
    pushIt(max, target, index + 1, count + 1); 
    },50) 
} 
function turnOf(){ 
    running = false; 
    this.removeEventListener(turnOf); 
} 

一切正常下降的點擊,但問題是,當我點擊XXX時間RLY快,它就會被摧毀,確實不受歡迎的行爲。我使用標誌,因此只有當「running」爲false時才能調用該函數,當應該移動的最後一個元素的轉換結束時,我會返回false。它在最初的幾次點擊中都能正常工作,但快速點擊會將其破壞並破壞整個腳本。

直播demo(點擊RLY快速XXX次看到的行爲)

這是什麼原因?該標誌只在轉換結束時才被設置,爲什麼函數被調用?有沒有辦法如何解決它,或者我應該使用暴力(承諾)呢?

+0

幾件事我注意到了蝙蝠是removeEventListener採用事件類型和回調,而不僅僅是回調。其次,您需要將偵聽器綁定到對象以確保對象中的「this」是您的想法。檢查出http://stackoverflow.com/questions/1338599/the-value-of-this-within-the-handler-using-addeventlistener – karina

回答

1

這似乎是你的問題:

function turnOf(){ 
    running = false; 
    //this.removeEventListener(turnOf); 
    this.removeEventListener("transitionend", turnOf); 
} 
相關問題