JS历理 点击播放mp3音频的功能
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>点击播放mp3音频的功能</title>
<link rel="stylesheet" href="/_/_js/katex/katex.min.css">
<link rel="stylesheet" href="/_/_js/layui/css/layui.css">
<link rel="stylesheet" href="/_/_css/base.css">
</head>
<body>
<div>
啊ā<a href='##ā' data-audio='/_/vod/pinyin/A/a/ā.mp3' class='layui-icon'></a>
巴bā<a href='##bā' data-audio='/_/vod/pinyin/B/ba/bā.mp3' class='layui-icon'></a>
<br>
<a href='##ā' data-audio='/_/vod/pinyin/A/a/ā.mp3' class='layui-icon'>啊ā</a>
<a href='##bā' data-audio='/_/vod/pinyin/B/ba/bā.mp3' class='layui-icon'>巴bā</a>
</div>
<script src="/_/_js/layui/layui.js"></script>
<script defer src="/_/_js/katex/katex.min.js"></script>
<script defer src="/_/_js/katex/contrib/auto-render.min.js"></script>
<script src="/_/_js/base.js"></script>
</body>
</html>
<script>
layui.use(['element', 'layer'], function() {
const element = layui.element;
const layer = layui.layer;
// 音频缓存池
const audioCache = new Map();
// 安全播放音频函数
function playAudioSafely(audioPath) {
// 从缓存中获取或创建新的Audio对象
let audio = audioCache.get(audioPath);
if (!audio) {
audio = new Audio(audioPath);
audio.preload = 'auto';
audioCache.set(audioPath, audio);
}
// 尝试播放音频
return audio.play().catch(error => {
console.error('播放失败:', error);
layer.msg('音频播放失败,请检查文件路径或浏览器设置', { icon: 2 });
throw error;
});
}
// 监听所有带有 data-audio 属性的 a 标签的点击事件
document.querySelectorAll('a[data-audio]').forEach(aTag => {
aTag.addEventListener('click', function(e) {
e.preventDefault(); // 阻止链接默认行为
const audioPath = this.dataset.audio;
playAudioSafely(audioPath);
});
});
});
</script>
效果图:


浙公网安备 33010602011771号