2013-08-28 15 views
5

Hem SoundManager2 hem de Soundcloud tarafından sağlanan seçenekleri kullanarak kendi soundcloud medya oynatıcımı oluşturmaya çalışıyorum.Javascript: Soundmanager2 ve Soundcloud olay geri bildirimi

soundManager.getSoundById(self.audio).togglePause(); 

ses oyunun ve tüm geri aramalar buna göre harekete geçirildi: Ben ses oynatacak

SC.stream('/tracks/' + this.media.mediaId, function(audio){ 
      audio.load({ 
       onload : function(){ 
        var duration = this.duration; 

       }, 
       onfinish : function(){ 
        self.updatePlayButton(); 
        console.log('Finished'); 
       }, 
       onresume : function(){ 
        self.updatePlayButton(); 
        console.log("resumed"); 
       }, 
       onstop : function(){ 
        self.updatePlayButton(); 
        console.log("Stopped"); 
       }, 
       onpause : function() { 
        self.updatePlayButton(); 
        console.log('Paused'); 
       }, 
       whileplaying : function() 
       { 
        console.log(this.position); 
        self.updateScrubber(this.position/(this.duration/100)); 
        self.$timeLeft.text(self.formatTime(this.position/1000)); 
        console.log(totalPercent,'My position'); 
       } 

      }); 
      self.audio = audio.sID; 
      self.registerEvents(); 
     }); 

:

İşte benim şimdiki kodudur. Ama "onfinish" geri çekilmesinden sonra, tekrar play tuşuna bastığımda ses tekrarlanacak, ancak olayların hiçbirini ateşlemeyecek.

Neyi yanlış yaptım?

cevap

4

"seçenekler" nesne ikinci argüman olarak geçirilebilir SC.stream() belgelerine göre: SC.stream(trackPath, [options], [callback])

seçenekleri

, soundObject kendisi ile ilişkilendirilecek böylece vermeyeceksin böyle böyle arama yapmadan .load() ve .play()

deneyin gibi bireysel yöntemler ararken tekrar ilan etmek gerekir:

var myOptions = { 
    onload : function() { 
    var duration = this.duration; 
    }, 
    onfinish : function(){ 
    self.updatePlayButton(); 
    console.log('Finished'); 
    }, 
    onresume : function(){ 
    self.updatePlayButton(); 
    console.log("resumed"); 
    }, 
    onstop : function(){ 
    self.updatePlayButton(); 
    console.log("Stopped"); 
    }, 
    onpause : function() { 
    self.updatePlayButton(); 
    console.log('Paused'); 
    }, 
    whileplaying : function() { 
    console.log(this.position); 
    self.updateScrubber(this.position/(this.duration/100)); 
    self.$timeLeft.text(self.formatTime(this.position/1000)); 
    console.log(totalPercent,'My position'); 
    } 
} 

SC.stream('/tracks/' + this.media.mediaId, myOptions, function(audio){ 
    audio.load(); 
    self.audio = audio.sID; 
    self.registerEvents(); 
}); 

böyle onload işlevi içinde değişken duration ile hiçbir şey yapmıyor gibi kod hakkında bazı diğer garip görünüşlü şeyler vardır. Ayrıca, self değişkenini kullanarak this kullanarak da Python veya JavaScript yazdığınızdan emin değilsiniz gibi görünüyorsunuz, ancak belki sizin için mantıklı.

Bu seçeneklerin soundObject numaralı telefona başarılı bir şekilde bağlanması, derhal sorununuzu çözecektir. İyi şanslar!

+1

Sadece açık olmak gerekirse, @ menzo-wijmenga nispeten yaygın olan "var self = this" tasarım desenini kullanıyor gibi görünüyor. Denetleyici, ses seçeneğinin “duration” veya “position” özniteliğine olay bağlama yoluyla erişirken “updatePlayButton” ve “updateTimeLeft” gibi yöntemlere sahip olabilir (yani 'self', akışı çağıran denetleyiciyi ifade eder; ses nesnesi). – elreimundo