2013-08-28 7 views
5

Я пытаюсь создать свой собственный звуковой медиаплеер с использованием опций, предоставляемых SoundManager2 и Soundcloud.Javascript: Обратный вызов события Soundmanager2 и Soundcloud

Вот мой текущий код:

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(); 
     }); 

Я играю аудио с использованием:

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

, и все обратные вызовы Аудиокампании игры увольняет соответственно. Но после «onfinish» callback, когда я снова нажму игру, он воспроизведет звук, но он не будет запускать какие-либо события.

Что я сделал не так?

ответ

4

Согласно документации для SC.stream() «Опции» объект может быть передан в качестве второго аргумента:

SC.stream(trackPath, [options], [callback])

параметры будут ассоциироваться с самим soundObject, так что вы не будете нужно объявить их снова при вызове отдельных методов, таких как .load() и .play()

попробовать сделать вызов, как это:

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(); 
}); 

Есть некоторые другие странные выглядящие вещи о вашем коде, например, ничего не делая с переменной duration внутри функции onload. Кроме того, использование переменной self, а также использование this заканчивается, похоже, что вы не уверены, пишите ли вы на Python или JavaScript, но, возможно, это имеет смысл для вас.

Надеемся, что варианты soundObject так или иначе помогут решить вашу проблему. Удачи!

+1

Просто, чтобы быть ясным, это выглядит как @ menzo-wijmenga использует относительно обычный шаблон шаблона 'var self = this'. Контроллер может иметь такие методы, как 'updatePlayButton' и' updateTimeLeft' при доступе к атрибуту 'duration' или' position' атрибута аудио через привязку события (т.е. 'self' относится к контроллеру, который вызывает поток, тогда как' this' относится к аудио объекта). – elreimundo

 Смежные вопросы

  • Нет связанных вопросов^_^