在 Javascript/CSS 中使用 onmousedown 时音频过早中断
Audio cuts out too soon in Javascript/CSS with onmousedown
我遇到了一个问题,我想在单击 link 时播放一点蜂鸣声,但除非按住点击,否则它会停止。
<script>
var beep = new Audio();
beep.src = "audio/select.mp3";
</script>
<div class="frame">
<div class="upperband">
<img src="images\Upper bar.png" alt="Upper overlay">
</div>
<div class="outer">
<div class="header">Maddie's School Site_</div>
<div class="wrapper">
<nav>
- home<br>
<a href="made.html" onmousedown="beep.play()">- Stuff I Made<br></a>
<a href="wrote.html" onmousedown="beep.play()">- Stuff I wrote<br></a>
<a href="whothehell.html" onmousedown="beep.play()">- Who the hell am I?<br></a>
</nav>
<div class="right">
<div class="shadowFX">
<img src="images\Website_Sprite_ghost.svg" alt="avatar">
</div>
</div>
</div>
</div>
</div>
如果不是最干净的,我们深表歉意。我进入网络编程学校一个月了,我们还没有涉及 Javascript 所以我的知识有限。
对于您编写的在鼠标按下时发出蜂鸣声的代码,您在同一元素上有一个 href。这就是您遇到问题的原因。
<a href="made.html" onmousedown="beep.play()">- Stuff I Made<br></a>
<a href="wrote.html" onmousedown="beep.play()">- Stuff I wrote<br></a>
简而言之,当用户点击上面显示的元素之一时,会发生两件事。首先,哔哔声开始播放,其次,用户被重定向到一个新页面。当用户被重定向到一个新页面时,它将停止播放蜂鸣声(加载新页面时它不会继续当前页面中正在进行的操作,如蜂鸣声)。
有几种方法可以解决这个问题,这取决于您希望发生什么。以下是我认为您可能正在尝试的一些想法:
1.) 如果您只想在点击标签时发出哔哔声,只需删除 href 即可,它应该可以正常工作,例如
<a onmousedown="beep.play()">- Stuff I Made<br></a>
2.) 如果你想播放哔哔声,然后在哔哔声播放完毕后将用户重定向到另一个页面,那么你需要删除href。代替 href,我们可以创建一个函数来等待哔哔声的长度,然后使用 javascript 将用户引导至新页面。该函数看起来像:
function handlePageChange() {
beep.play(); // start playing the beep
// wait (timeout) for three seconds while the beep plays
setTimeout(function() {
// then load the new page
document.location.href = "made.html"; // the new page you want to open
}, 3000); // 3000 is three seconds. Update it to however long your beep is
}
3.) 如果您希望每当用户加载新页面时都播放哔哔声,您可以在您希望它播放的任何页面的部分中 运行 beep.play() .
4.) 如果你想播放哔声并让它无缝地转移到新页面而没有延迟,它会变得有点复杂。解决方案多种多样,但something like this似乎是公认的答案,但音频不会完美过渡。
我遇到了一个问题,我想在单击 link 时播放一点蜂鸣声,但除非按住点击,否则它会停止。
<script>
var beep = new Audio();
beep.src = "audio/select.mp3";
</script>
<div class="frame">
<div class="upperband">
<img src="images\Upper bar.png" alt="Upper overlay">
</div>
<div class="outer">
<div class="header">Maddie's School Site_</div>
<div class="wrapper">
<nav>
- home<br>
<a href="made.html" onmousedown="beep.play()">- Stuff I Made<br></a>
<a href="wrote.html" onmousedown="beep.play()">- Stuff I wrote<br></a>
<a href="whothehell.html" onmousedown="beep.play()">- Who the hell am I?<br></a>
</nav>
<div class="right">
<div class="shadowFX">
<img src="images\Website_Sprite_ghost.svg" alt="avatar">
</div>
</div>
</div>
</div>
</div>
如果不是最干净的,我们深表歉意。我进入网络编程学校一个月了,我们还没有涉及 Javascript 所以我的知识有限。
对于您编写的在鼠标按下时发出蜂鸣声的代码,您在同一元素上有一个 href。这就是您遇到问题的原因。
<a href="made.html" onmousedown="beep.play()">- Stuff I Made<br></a>
<a href="wrote.html" onmousedown="beep.play()">- Stuff I wrote<br></a>
简而言之,当用户点击上面显示的元素之一时,会发生两件事。首先,哔哔声开始播放,其次,用户被重定向到一个新页面。当用户被重定向到一个新页面时,它将停止播放蜂鸣声(加载新页面时它不会继续当前页面中正在进行的操作,如蜂鸣声)。
有几种方法可以解决这个问题,这取决于您希望发生什么。以下是我认为您可能正在尝试的一些想法:
1.) 如果您只想在点击标签时发出哔哔声,只需删除 href 即可,它应该可以正常工作,例如
<a onmousedown="beep.play()">- Stuff I Made<br></a>
2.) 如果你想播放哔哔声,然后在哔哔声播放完毕后将用户重定向到另一个页面,那么你需要删除href。代替 href,我们可以创建一个函数来等待哔哔声的长度,然后使用 javascript 将用户引导至新页面。该函数看起来像:
function handlePageChange() {
beep.play(); // start playing the beep
// wait (timeout) for three seconds while the beep plays
setTimeout(function() {
// then load the new page
document.location.href = "made.html"; // the new page you want to open
}, 3000); // 3000 is three seconds. Update it to however long your beep is
}
3.) 如果您希望每当用户加载新页面时都播放哔哔声,您可以在您希望它播放的任何页面的部分中 运行 beep.play() .
4.) 如果你想播放哔声并让它无缝地转移到新页面而没有延迟,它会变得有点复杂。解决方案多种多样,但something like this似乎是公认的答案,但音频不会完美过渡。