2011-10-18 109 views
1

爲了在設計中獲得播放聲音的HTML5動畫,我製作了名爲「theScreen」的整個瀏覽器大小的div,並使用以下內容代碼:HTML5 iPad/iPhone設備上的音頻在觸摸時會停止

audioCont.prototype.iCrapLoadPlayThrough = function() { 
    if (this.supported) { 
     theScreen = document.getElementById("theScreen"); 
     var self = this; 
     theScreen.addEventListener('touchstart', function(){self.iCrapClickedLoadPlayThrough();}, false); 
     return(1); 
    } else { 
     return(0); // Not supported 
    } 
}; 
audioCont.prototype.iCrapClickedLoadPlayThrough = function() { // Check if supported, then load the audio file 
    var self = this; 
    theScreen.removeEventListener('touchstart', function(){self.iCrapClickedLoadPlayThrough();}, false); 
    this.addCanPlayThrough(); 
    this.load(); 
} 

現在這個工作,並且當用戶在屏幕上點擊時聲音/動畫開始。問題是,如果他們再次點擊它,聲音就會停止,每重複一次,您就會聽到幾毫秒的音頻。有誰知道爲什麼?

回答

0

它不會刪除事件偵聽器,因爲它是一個匿名函數。刪除匿名函數,只是有功能名稱,而不是

theScreen.addEventListener('touchstart',self.iCrapClickedLoadPlayThrough,false) 
theScreen.removeEventListener('touchstart',self.iCrapClickedLoadPlayThrough,true) 
+0

偏偏叫一個孩子(原型)功能時,這不起作用。這就是爲什麼我首先寫這樣的聽衆。 –

+0

它確實,我自己在庫中使用它,但我確實喜歡你提供的解決方案。 – 2011-10-20 14:06:49

0

我已經找到了解決問題的辦法:

theScreen.addEventListener('touchstart', eventID=function() {self.iCrapClickedLoadPlayThrough();}, false); 

then 

theScreen.removeEventListener('touchstart', eventID, false); 
相關問題