2

我使用SoundManager2在我的网站上播放声音。

现在我想在每次用户播放声音时发送一个谷歌分析事件。

SoundManager2 的文档说您可以通过设置属性来捕捉“播放中”事件,但是在使用360-ui-player时,这不起作用。

我像这样初始化 SoundManager2:

<link rel="stylesheet" type="text/css" href="/app/sm/360/360player.css" />
<link rel="stylesheet" type="text/css" href="/app/sm/flashblock.css" />

<script src="/app/sm/360/berniecode-animator.js" type="text/javascript"></script>
<script src="/app/sm/soundmanager2-nodebug-jsmin.js" type="text/javascript"></script>
<script src="/app/sm/360/360player.js" type="text/javascript"></script>

<script type="text/javascript">
  soundManager.url = '/app/sm/swf/';
  threeSixtyPlayer.config = {
    playNext: false, 
    autoPlay: false, 
    allowMultiple: false,
    loadRingColor: '#ccc',
    playRingColor: '#AB3C2E',
    backgroundRingColor: '#eee',
    animDuration: 500,
    onplay: function() {
      alert('Playing!'); // DOES NOT WORK!
    },
    animTransition: Animator.tx.veryBouncy
  }        
</script>

有没有人对此有有效的解决方案?

我读到了人们在 SoundManager 源代码中更改 createSound() 函数的解决方案,但我很想看到一个解决方案,而无需像这样更改库。

4

2 回答 2

5

今天我在soundmanager2的defaultOptions中设置的“onplay”回调也遇到了类似的问题,当360player播放歌曲时,soundmanager2没有调用它。

我发现 360player.js 调用soundManager.createSound()指定了它自己的“onplay”回调(threeSixtyPlayer.events.play()函数),从而覆盖了我的默认回调。

另外,请注意:没有threeSixtyPlayer.config.onplay可以为我所看到的设置属性。

一个非侵入性的解决方案应该是封装回调,例如:

var onplay360 = threeSixtyPlayer.events.play;

var myOnplay = function(){
  ... your stuff... ;
  onplay360.apply(this); // forces the scope to 'this' = the sound object
};

threeSixtyPlayer.events.play = myOnplay;

希望这可以帮助。

干杯,马可

于 2012-07-11T22:28:09.053 回答
1

我有同样的问题。我搜索了答案,但似乎没有太多关于 360player.js 的文档。我想你只需要研究代码。我尝试了 Marco 的方法,但这对我不起作用。实际上对我有用的东西要简单得多。

threeSixtyPlayer.events.play = function(){ 
    //Do Something here like...
    alert('Are you serious?');
}

这应该给你一个良好的开端。我相信其他事件也可以通过这种方式挂钩。

于 2012-07-17T13:38:32.340 回答