首页 > 解决方案 > 我在使用 .play 函数时遇到了一些问题 javascript

问题描述

我一直在尝试在我正在制作的一些新游戏中使用音频,并且我已经正确设置了所有内容,因为它是一个非常简单的程序。音频在控件打开的情况下播放良好,但我想弄清楚如何用 Javascript 播放它,所以播放器事件可以触发声音。

我努力了:

    <!DOCTYPE html>
    <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>audio?</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
      <audio id='test'>
        <source src='test.mp3' type='audio/mpeg'>
        sorry
      </audio>
      <script>
        var myAudio=document.getElementsByName('test');
        myAudio.play();
      </script>
    </body>
  </html>

同样,一个非常简单的代码和我得到的错误消息是:

TypeError: myAudio.play 不是一个函数。

任何人都可以帮助解决这个问题吗?

标签: javascriptaudio

解决方案


您应该查看的文档Document.getelementsByName(),因为您似乎对它的正确使用有两个误解:

  1. 链接的文档指出,成功的调用会返回一个NodeList或一个HTMLCollection对象,两者都没有任何方法play()。您似乎认为此方法将返回一个 single Node,但事实并非如此。

  2. 链接的文档还表明它将通过name属性来定位元素。您没有在 HTML 中提供的任何元素中使用属性name-id您似乎想要引用的元素与.name

    (这仅适用于 Internet Explorer 10 及更低版本,如果 或 值与您传递的参数的值匹配,则将返回元素但是idname依赖这种非标准行为并不是一个很好的做法,尤其是考虑到 IE 不断减少的市场份额。)

在这种情况下,您确信只有一个 ID 为 的元素test,您可能希望改为使用Document.querySelector()(它返回Node您看似正在寻找的):

var myAudio=document.querySelector('#test');
myAudio.play();

或者,Document.getElementById()也可以在这种情况下工作:

var myAudio=document.getElementById('test');
myAudio.play();

推荐阅读