0

只是基于反馈的快速编辑:这个问题的主要部分是我的经验不足。如果您能给我一些有关如何调查/调试的提示,我将不胜感激。再次感谢。尼尔

我有这个功能/插件,用于在单击元素时播放声音:

(function($){
    $.fn.attachSound = function (soundSrc)
    {
    return this.each(function(index){
        var audioElement = document.createElement('audio');
        if (audioElement.canPlayType('audio/mpeg') == '')
        {
        soundSrc = soundSrc.replace('.mp3','.ogg');
        }
        audioElement.setAttribute('src', soundSrc);
        $(this).click(function() {
        audioElement.play();
        });
    })
    }
})( jQuery );

这是我如何称呼它的一个例子:

$(document).ready(function(){
    $('#laughter-button').attachSound('sounds/laughter-elf.mp3');
    $('#laughter-button2').attachSound('sounds/laughter-santa.mp3');
})

到目前为止,它可以在 Chrome、FF、Opera 和 Safari 中运行(所有当前版本,我还没有在 IE 上进行测试)。我遇到的问题是在 Safari 中,它仅适用于第一个用户点击。我想使用此功能的方法之一是作为基于声音的记忆游戏的一部分,因为它不会这样做。有任何想法吗?

我在编程方面非常缺乏经验,而且我从未尝试过闪存回退技术,但我愿意研究它是如何工作的。不过,也许有更好的方法,或者您可以为我指明正确的方向?

谢谢你,尼尔

4

2 回答 2

0

检查 Safari 是否支持http://html5test.com/上的 mp3 音频/Html5

于 2013-05-17T12:57:07.093 回答
0

我想出了一个折中的解决方案。此解决方案在每次单击时创建一个新音频,而不仅仅是在 document.ready 上。缺点是效率较低,但至少可以在 Safari 中使用。我有办法改进它。现在,虽然我对这个解决方案很满意,只是因为它有效。尽管如此,如果你能想到一个更好的解决方案,我当然愿意接受。我可能最终会尝试将此代码与浏览器嗅探或其他东西结合起来。感谢所有让我以不同方式思考这个问题的人。尼尔

(function($){
    $.fn.attachSound = function (soundSrc)
    {
    return this.each(function(index){
        $(this).click(function() {
        var audioElement = document.createElement('audio');
            if (audioElement.canPlayType('audio/mpeg') == '')
            {
            soundSrc = soundSrc.replace('.mp3','.ogg');
            }
        audioElement.setAttribute('src', soundSrc);
        audioElement.play();
        });
    })
    }
})( jQuery );
于 2013-05-18T00:15:57.840 回答