当前位置: 首页 > 知识库问答 >
问题:

单击[重复]时播放音频文件的按钮

厍兴腾
2023-03-14

我想知道如何创建像这个网站上的按钮,当点击将播放一个简短的音频文件。

https://www.theitalianexperiment.com/learn-意大利语/to-be

我知道如何使用该元素添加音频文件,但我想以按钮格式将其添加到文本的左边(例如,添加到下面的代码中),就像在网站上一样,这就是我所坚持的。

HTML

  <tr>
  <td>Here <br> There</td>
  <td>Apa <br> Kuaka</td>
  </tr>

CSS

background-color:#f7f7f7 !important;
padding:20px !important;
border-radius:10px;
border:0px !important;
}

谢谢!

共有1个答案

伯君浩
2023-03-14

JavaScript有音频play()pause()方法,我们可以用来再现这种行为。我使用这两种方法构建了下面的示例,并围绕它们构建了一个功能操作系统,它将允许您按媒体节点获取按钮,获取与按钮节点相关联的媒体文件,以及轻松地播放/暂停/停止媒体文件。

请查看:

null

const isPlaying = media => !media.paused;
const play = media => (media.play(), getMediaGroupsByMedia(media).forEach(mgroup => mgroup.dataset.mediaState = "playing"));
const pause = media => (media.pause(), getMediaGroupsByMedia(media).forEach(mgroup => mgroup.dataset.mediaState = "paused"));
const stop = media => (media.pause(), media.currentTime = 0, getMediaGroupsByMedia(media).forEach(mgroup => mgroup.dataset.mediaState = "stopped"));
const allMedia = Array.from(document.querySelectorAll('audio, video'));
const allControls = Array.from(document.querySelectorAll('.media-control'));
const allMediaGroups = Array.from(document.querySelectorAll('.media-group'));
const getMediaByControl = control => allMedia.find(media => media.matches(control.dataset?.target));
const getControlsByMedia = media => allControls.filter(control => document.querySelector(control.dataset?.target) === media);
const getMediaGroupByControl = control => control.closest('.media-group');
const getMediaGroupsByMedia = media => getControlsByMedia(media).map(control => getMediaGroupByControl(control));
const stopAllMedia = () => allMedia.forEach(media => stop(media));

document.addEventListener('click', e => {
  if (e.target && allControls.includes(e.target)) {
    const control = e.target;
    const media = document.querySelector(control.dataset.target);
    if (isPlaying(media)) { stop(media); }
    else { stopAllMedia(); play(media); }
  }
});
document.addEventListener('ended', e => {
  if (e.target && allMedia.includes(e.target)) {
    const media = e.target;
    stop(media);
  }
});
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
body {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-family: 'Noto Sans JP', sans-serif;
}
h1 {
  margin: 0 0 10px;
}
.media-group + .media-group {
  margin-top: 10px;
}
.media-group .media-control {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background-color: #546e7a;
  border: none;
  border-radius: 7px;
  color: rgba(255, 255, 255, 0.875);
  overflow: hidden;
  cursor: pointer;
}
.media-group .media-control::after {
  content: '▶';
  transform: rotate(0deg);
  transition: transform 0.15s ease-out;
  pointer-events: none;
}
.media-group[data-media-state="playing"] .media-control {
  background-color: #4caf50;
}
.media-group[data-media-state="playing"] .media-control::after {
  transform: rotate(90deg);
}
<h1>Audio Sample Previews</h1>
<div class="media-group" data-media-state="stopped">
  <span>Audio #1</span>
  <button class="media-control" data-target="#audio1"></button>
</div>
<div class="media-group" data-media-state="stopped">
  <span>Audio #2</span>
  <button class="media-control" data-target="#audio2"></button>
</div>


<audio id="audio1">
  <source src="https://assets.codepen.io/1580009/sample1.ogg" type="audio/ogg">
  <source src="https://assets.codepen.io/1580009/sample1.mp3" type="audio/mpeg">
  Your browser does not support the audio element.
</audio>
<audio id="audio2">
  <source src="https://assets.codepen.io/1580009/sample2.ogg" type="audio/ogg">
  <source src="https://assets.codepen.io/1580009/sample2.mp3" type="audio/mpeg">
  Your browser does not support the audio element.
</audio>
 类似资料:
  • 问题内容: 单击按钮时,我尝试播放音频文件,但它不起作用,我的html代码为: 我的JavaScript是: 问题答案: 哪种方法? 您可以使用或或标签播放音频。延迟加载(需要时加载)如果声音很小,则声音是最好的方法。您可以动态创建音频元素,在加载音频元素时可以使用来启动和暂停。 我们使用的东西 我们将使用事件来检测我们的文件已准备好播放。 音频元素没有任何功能。我们只能暂停它们。而且,当我们要从

  • 这个问题基本上可以解释自己。我想获取一个音频文件(我真的可以使用任何格式)并在调用时从中输出 Java 声音。

  • 我在我的应用程序中编写了这段代码 接收器.java 它工作完美,但是我注意到屏幕关闭时播放音频有延迟。我想这是因为设备在启动关闭状态之前会调暗屏幕。 我希望它在单击触发关闭状态的操作(例如单击电源按钮、手势或双击以唤醒和睡眠)时播放关闭音频。在这种情况下,我希望它在触发电源按钮时播放。 有办法让这成为可能吗?

  • 我有一个网页,提供通过手机动态下载mp3文件。我想添加一个功能,在下载文件之前,有人可以通过他们的台式机来收听这首歌。 我需要做什么?

  • 函数名称: 播放音频 函数功能: 在后台播放指定的声音文件 函数方法 media.playAudio(path,vol,flag) 参数 类型 必填 说明 path string 是 音频文件名,支持 mp3、m4a、m4r、ogg、wav vol string 否 音频音量,不写默认,使用当前设置的音量 flag string 否 是否循环播放,不写默认为 false - 不循环,true -

  • 我有一个计划线程,大约每半秒运行一次,每次播放一个音频剪辑,在每个循环之前对剪辑调用,以便再次: 但第一次之后就不再播放了。代码运行,但声音不播放。有什么想法吗?