如何通过一个按钮或链接切换音频播放()暂停()?

IT技术 javascript html audio
2021-03-06 19:41:49

我有一个音频文件,可以在单击锚标记时播放。如果再次单击锚标记,我希望音频暂停,我只是对 javascript 了解得不够多,无法将后半部分拉下来。我不想更改他们单击的锚标记的内容,我只想在他们单击标记时启动和暂停音频文件。

到目前为止,这是我所拥有的,至少可以使声音文件可播放:

<audio id="audio" src="/Demo.mp3"></audio>
<a onClick="document.getElementById('audio').play()">Click here to hear.</a>
5个回答

一种 Vanilla Javascript 方式来做你需要的。

注意:我注意到对其他问题的评论对原生 js 方法有多个赞成票,并且看到 OP 没有jquery标签。

所以WORKING EXAMPLE

SOLN 1:(我最初使用事件的解决方案)

var myAudio = document.getElementById("myAudio");
var isPlaying = false;

function togglePlay() {
  isPlaying ? myAudio.pause() : myAudio.play();
};

myAudio.onplaying = function() {
  isPlaying = true;
};
myAudio.onpause = function() {
  isPlaying = false;
};
<audio id="myAudio" src="http://www.sousound.com/music/healing/healing_01.mp3" preload="auto">
</audio>
<a onClick="togglePlay()">Click here to hear.</a>

SOLN 2:(myAudio.paused根据dandavi 的评论使用属性

var myAudio = document.getElementById("myAudio");

function togglePlay() {
  return myAudio.paused ? myAudio.play() : myAudio.pause();
};
<audio id="myAudio" src="http://www.sousound.com/music/healing/healing_01.mp3" preload="auto">
</audio>
<a onClick="togglePlay()">Click here to hear.</a>

如果有人问为什么 getter 和 setter 很重要;这是在选择 makeXTrue()、makeXFalse() 而不是 setX(value) 时出现的复杂性的主要例子。
2021-05-05 19:41:49
我认为第一个解决方案不值得保留。除非对 的支持存在问题,否则paused将播放器上的选项卡与其自己的状态保持在不同的状态不仅是多余的,而且如果您的代码中出现问题,还会导致不同步问题。形式的单一事实来源paused可以防止这种情况。
2021-05-10 19:41:49
var audioElement= document.getElementById("audio-player");
function togglePlay() {
    if (audioElement.paused) {
        audioElement.play();
    }
    else {
        audioElement.pause();
    }
};

您可以使用 jQuery 对此进行切换。

<a id="music-button" style="cursor:pointer;">
<img src="http://i.stack.imgur.com/LT3WE.png"></a>
<audio id="playMusic" autoplay>
<source src="sound.mp3">
</audio>

<script type="text/javascript">
$('#music-button').toggle(
function () {
document.getElementById('playMusic').play();
},
function () {
document.getElementById('playMusic').pause();
}
);
</script>
你也能给出一个纯javascript解决方案吗?并不是每个搜索这篇文章的人都想要或有能力使用 jQuery。
2021-05-02 19:41:49
@Shane 可能有点晚了,但我添加了一个 vanilla javascript 解决方案。
2021-05-15 19:41:49

myAudio 变量必须在函数调用中......它工作正常

function togglePlay() {
  var myAudio = document.getElementById("myAudio");
  return myAudio.paused ? myAudio.play() : myAudio.pause();
};
<audio 
id="myAudio" src="https://clubajax.pythonanywhere.com/media/contact/backgroundM.mp3" preload="auto">
</audio>

<input type="button" value="sound" onclick="togglePlay()" />

var Sample-Audio = document.getElementById("Sample");

function togglePlay() {
  return Sample-Audio.paused ? Sample-Audio.play() : Sample-Audio.pause();
};
<audio id="Sample" preload="auto">
  <source src="./sounds/rain.mp4" type="audio/mp4">
  <source src="./sounds/rain.ogg" type="video/ogg"> 
</audio>
<a onClick="togglePlay()">Click here to hear.</a>