【问题标题】:jQuery: How do you preload sound?jQuery:你如何预加载声音?
【发布时间】:2011-02-15 07:30:19
【问题描述】:

我有一个网站,当您单击按钮时会播放声音。

我就是这样做的

function PlaySound(soundfile) {
    $('#soundContainer').html("<embed src='/uploads/sounds/" + soundfile + "' hidden=true autostart=true loop=false>");
}

如何预先加载声音文件?

谢谢。

【问题讨论】:

    标签: jquery audio preload


    【解决方案1】:

    在 HTML5 中这样做:

    my_sound = $("<audio>", {src:"filename.mp3",preload:"auto"}).appendTo("body");
    

    然后播放它:

    my_sound[0].play();
    

    【讨论】:

      【解决方案2】:

      只是在我的脑海中思考,你能不能对声音文件发出 ajax 请求,但在文件 100% 加载之前不显示按钮。

      $(document).ready(function() {
          $.ajax({
              url: "soundfile.mp3",
              success: function() {
                  $("#play_button").show();
              }
          });
      });
      

      【讨论】:

      • 这是一个很好的解决方案,但不能在 IE 中工作,至少不能处理声音文件,因为 IE 无法正确处理二进制文件并且不会触发成功功能,请参阅此问题以获取更多信息:@ 987654321@ - 今天才发现。
      【解决方案3】:

      使用 JavaScript 播放声音有很多更好的方法。对于我最喜欢的,请查看SoundManager。有了它,您只需调用soundManager.load即可抢先加载声音文件。

      【讨论】:

        【解决方案4】:

        没有&lt;embed&gt;这样的东西。

        您可以在没有autoplay 的情况下使用HTML5 &lt;audio&gt; 元素,然后让它开始使用play() 方法。

        【讨论】:

        • 还要牺牲IE支持。
        • 您可以使用 添加 IE 兼容性。我会链接一些示例,但 GeoCities 已关闭。
        【解决方案5】:
        1. 向它发出 AJAX 请求。如果您的服务器发出正确的缓存标头(如 Expires),它将存储在浏览器缓存中。

        2. 丑陋的方式:

        声音文件 = 新图像();
        soundfile.src = /uploads/sounds/" + soundfile;

        【讨论】:

        • 谢谢Sanmai,但我认为代码不起作用...页面加载时似乎下载文件,但是当我单击按钮时重新下载。
        • 你检查缓存头了吗?如果它们都没有,客户端肯定会重新下载文件。如果您使用的是 Apache,请花一些时间阅读有关 mod_exires 的信息。如果没有,Google 会提供帮助。
        猜你喜欢
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        相关资源
        最近更新 更多