我之前有一个问题2 audio sounds and I want to play one HTML5 audio element at a time,已经回答了。但是,我还有两个问题:
1)需要帮助解释它:.bind中的null(null,audios [i [)是什么意思?我研究过null但仍然混淆。
外部JS:
var audios = document.getElementsByTagName('audio');
for(var i=0; i<audios.length;i++) {
audios[i].onplay = pauseAllAudios.bind(null, audios[i]);
}
function pauseAllAudios(audio){
for(var i=0; i<audios.length;i++)
if(audios[i]!=audio) {
} audios[i].pause();
}
};
2)当我把它放进去的时候 Html页面:
<script type="text/javascript" src="js/audio.js"></script>
在</head>
部分之前,javascript不起作用。如果我把它放在</body>
部分之前,
javascript有效。不应该在这两个方面都有效吗?
答案 0 :(得分:0)
.bind()
函数返回另一个函数,该函数在调用时将使用传递给.bind()
的第一个参数作为this
的值。您的pauseAllAudios()
功能未使用this
,因此传递null
只会使this
成为null
。真的,它可能是任何东西,但null
是一个很好的可读标记,意思是“我的函数不需要this
绑定任何东西”。
代码在身体末端起作用,因为浏览器在遇到代码时运行代码,在构建DOM 时运行代码。当脚本位于head部分时,包含音频元素的DOM部分尚不存在。当它在身体的末端时,DOM(几乎)完成。
答案 1 :(得分:0)
对于第二个问题,也许 js / audio.js 需要另一个javascript文件,然后当你把它放在头部时它就在所需的文件之前,所以它不能正常工作,当你把它放在</body>
之前它在所需的js文件后加载然后工作