2012-04-12 74 views
2

我使用SoundManager2在我的网站上播放声音。SoundManager2 onplay事件配置不起作用

现在,我希望每次用户播放声音时发送Google Analytics事件。

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()函数的解决方案,但我很想看到一个解决方案,而不用更改库。

+0

你有没有遇到过这种情况?我自己也有同样的问题。 – 2012-04-17 12:46:09

+0

不,还在等待任何富有成效的评论...我会更新问题,并尽快解决它,一旦我得到它的工作... – basZero 2012-04-18 13:11:15

+0

谢谢基..看到一些人在soundmanager论坛上有同样的问题。共识似乎是编辑360player.js这似乎icky .. – 2012-04-18 13:54:10

回答

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; 

希望这有助于。

干杯, 马尔科

+0

此外,我刚刚发现'play'事件只触发一次!在播放歌曲的开始。每次暂停播放都会触发事件暂停。但是,如果您希望在用户暂停并重新开始播放多次时让它工作,则还必须定义事件**'resume' **。只需将你的代码块复制到'play'事件并命名为'resume'即可。 – actimel 2015-02-03 22:29:53

1

我有同样的问题。我搜索了答案,但似乎没有太多,如果有关于360player.js的任何文档。我想你只需要研究代码。我尝试了Marco的方法,但那对我没有用。实际上为我工作的更简单得多。

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

这应该给你一个良好的开端。我相信其他事件也可以以这种方式被吸引。