播放本地音频(多文件)
本帖最后由 马黑黑 于 2022-6-6 19:28 编辑 <br /><br /><style type="text/css">.mama { margin: auto; width: fit-content; height: fit-content; position: relative; }
.mama fieldset { margin-top: 10px; padding: 4px 10px; border: 1px solid #eee; background: #ccc linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.15)); box-shadow: 1px 1px 2px #444; }
.mama fieldset legend { padding: 4px 8px; border: 1px solid #eee; background: inherit; }
#file { display: none; }
#aud { outline: none; }
#audlist { color: black; }
#audlist li { cursor: pointer; }
</style>
<div class="mama">
<fieldset>
<legend><label style="cursor: pointer;">请选择文件<input id="file" type="file" accept="audio/*" multiple="multiple" /></label></legend>
<ol id="audlist"></ol>
</fieldset>
<p><br><audio id="aud" controls="controls" autoplay="autoplay"></audio></p>
</div>
<script language="javascript">
let file = document.querySelector('#file'),
aud = document.querySelector('#aud'),
audlist = document.querySelector('#audlist');
let filelist = [];
let idx = 0;
file.onchange = () => {
let fileArr = file.files;
if(fileArr.length) {
audlist.innerHTML = '';
filelist.length = 0;
idx = 0;
Array.from(fileArr).forEach((item,key) => {
let ar = ;
filelist.push(ar);
let listr = '<li onclick="playselected(' + key + ')">' + item.name.split('.') + '</li>';
audlist.innerHTML += listr;
})
aud.src = filelist;
setColor();
}
}
aud.addEventListener('ended', () => {
idx ++;
if(idx >= filelist.length) idx = 0;
aud.src = filelist;
setColor();
})
let setColor = () => {
Array.from(audlist.children).forEach((li,key) => {
key == idx ? li.style.color = 'black' : li.style.color = 'gray';
})
}
let playselected = (id) => {
idx = id;
aud.src = filelist;
setColor();
}
</script>
代码:未对文件进行格式过滤
<style type="text/css">
.mama { margin: auto; width: fit-content; height: fit-content; position: relative; }
.mama fieldset { margin-top: 10px; padding: 4px 10px; border: 1px solid #eee; background: #ccc linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.15)); box-shadow: 1px 1px 2px #444; }
.mama fieldset legend { padding: 4px 8px; border: 1px solid #eee; background: inherit; }
#file { display: none; }
#aud { outline: none; }
#audlist { color: black; }
#audlist li { cursor: pointer; }
</style>
<div class="mama">
<fieldset>
<legend><label style="cursor: pointer;">请选择文件<input id="file" type="file" accept="audio/*" multiple="multiple" /></label></legend>
<ol id="audlist"></ol>
</fieldset>
<p><br><audio id="aud" controls="controls" autoplay="autoplay"></audio></p>
</div>
<script language="javascript">
let file = document.querySelector('#file'),
aud = document.querySelector('#aud'),
audlist = document.querySelector('#audlist');
let filelist = [];
let idx = 0;
file.onchange = () => {
let fileArr = file.files;
if(fileArr.length) {
audlist.innerHTML = '';
filelist.length = 0;
Array.from(fileArr).forEach((item,key) => {
let ar = ;
filelist.push(ar);
let listr = '<li onclick="playselected(' + key + ')">' + item.name.split('.') + '</li>';
audlist.innerHTML += listr;
})
aud.src = filelist;
setColor();
}
}
aud.addEventListener('ended', () => {
idx ++;
if(idx >= filelist.length) idx = 0;
aud.src = filelist;
setColor();
})
let setColor = () => {
Array.from(audlist.children).forEach((li,key) => {
key == idx ? li.style.color = 'black' : li.style.color = 'gray';
})
}
let playselected = (id) => {
idx = id;
aud.src = filelist;
setColor();
}
</script>
打开本地音频文件的多选方法:
方法一:单击选中一个文件后,按 shift 键不放,鼠标指针移动到前面文件之前或之后的文件,相中某个文件后单击它,松开shift键。这会选择两个文件之间包含该两个文件的相连的所有文件,然后单击确定按钮。
方法二:单击选中第一个文件后,按 Ctrl 键不放,然后任意单击想要选择的其它文件,选够了松开 Ctrl键,单击确定按钮。
方法三:找到音频目录后,按 Ctrl键 + A,这回全选音频文件,再点击确定按钮。
每一次打开本地音频文件,播放列表都会被清空。
单击播放列表中的歌名,audio 会转到对该文件的播放,播放完毕继续往下播放,播放到最后一首会从头再来。 为什么不加入文件格式过滤机制?
实际上,input已经有了文件过滤机制,但远远不够:一者,audio标签还在发展中,对所有格式的音频文件的支持应不是一日之功,二者,绕过input标签的过滤机制轻而易举。
但我们这个小程序不是文件上传的东东,是自娱自乐的,所以都会善待自己,除非测试,否则不会打开镁铝图片给 audio 播放。 老黑这个制作真方便了大家了啊。谢谢老黑。你太伟大了!{:4_199:} 加林森 发表于 2022-6-6 18:18
老黑这个制作真方便了大家了啊。谢谢老黑。你太伟大了!
你的电脑上应该有很多MP3{:4_170:} 马黑黑 发表于 2022-6-6 18:19
你的电脑上应该有很多MP3
是啊,我有很多专辑的。 加林森 发表于 2022-6-6 18:24
是啊,我有很多专辑的。
厉害厉害 马黑黑 发表于 2022-6-6 19:21
厉害厉害
我喜欢得嘛。{:5_117:} 加林森 发表于 2022-6-6 19:26
我喜欢得嘛。
嗯嗯,挺好。发现这个程序有啥问题,反馈一下,毕竟刚做好,也没有多少测试 马黑黑 发表于 2022-6-6 19:27
嗯嗯,挺好。发现这个程序有啥问题,反馈一下,毕竟刚做好,也没有多少测试
好的,有问题我会告诉你的,你放心吧。 加林森 发表于 2022-6-6 19:32
好的,有问题我会告诉你的,你放心吧。
OK 马黑黑 发表于 2022-6-6 19:33
OK
{:5_146:} 这个好,不但能加多首歌曲,还能在多歌曲里切换,想听哪首就听哪首{:4_187:} 这个没限制文件类型,好像都能打开呢,发现m4a的也能打开。 红影 发表于 2022-6-6 20:26
这个没限制文件类型,好像都能打开呢,发现m4a的也能打开。
它不是没有限制,只是宽松 马黑黑 发表于 2022-6-6 20:43
它不是没有限制,只是宽松
还能看到文件名和文件信息,真不错{:4_187:} 红影 发表于 2022-6-6 20:45
还能看到文件名和文件信息,真不错
还行吧 红影 发表于 2022-6-6 20:20
这个好,不但能加多首歌曲,还能在多歌曲里切换,想听哪首就听哪首
这个功能容易做的 马黑黑 发表于 2022-6-6 20:45
这个功能容易做的
我是觉得特别好。黑黑分享了好多非常实用的东西{:4_187:}