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?'); 
} 

這應該給你一個良好的開端。我相信其他事件也可以以這種方式被吸引。