Javascript 如何在整个父级中动态选择音频标记?
我一直在尝试创建一个mp3文件播放器,它利用文件阅读器api在浏览器中上传/播放歌曲。到目前为止,一切都很好,mp3几乎完全可以正常工作 文件读取器所做的是创建一个音频标记,并将结果分配给Javascript 如何在整个父级中动态选择音频标记?,javascript,html,audio,functional-programming,filereader,Javascript,Html,Audio,Functional Programming,Filereader,我一直在尝试创建一个mp3文件播放器,它利用文件阅读器api在浏览器中上传/播放歌曲。到目前为止,一切都很好,mp3几乎完全可以正常工作 文件读取器所做的是创建一个音频标记,并将结果分配给音频标记的src值,然后创建一个通用html p标记,其中包含所读取文件的名称。如果您要上传一个despacito.mp3,它将在p标签中显示“despacito.mp3” 我想通用的html段落标签,是用来播放mp3文件,它是附加的,当它被点击。但我的问题是,除非我为每个音频标记创建一个事件侦听器,然后专门创
音频标记的src
值,然后创建一个通用html p
标记,其中包含所读取文件的名称。如果您要上传一个despacito.mp3,它将在p标签中显示“despacito.mp3”
我想通用的html段落标签,是用来播放mp3文件,它是附加的,当它被点击。但我的问题是,除非我为每个音频标记创建一个事件侦听器,然后专门创建一个对所选音频使用.play方法的函数,否则我无法专门针对每个音频文件
我想要普通的ht
我的代码很邋遢,对此我深表歉意,我已经把它全部放在一个html文件中,样式标记也放在html中
我还没有一个错误功能,所以如果你上传一个.mp3文件以外的任何东西,它仍然会将它附加到音频标签上
**HTML
<body>
<header>
<h1>JukeBox</h1>
<input type = 'file' id='check'>
</header>
<div id="container">
</div>
<div class = 'control'>
<div class ='icons'>
<div class='flex'>
<div class='pack'>
<i class="fas fa-random" id="random"></i>
</div>
<div class='pack'>
<i class="fas fa-step-backward"></i>
<button id="playButt">
<i class="fas fa-play"></i>
</button>
<button id="pauseButt">
<i class="fas fa-pause"></i>
</button>
<i class="fas fa-step-forward"></i>
</div>
<div class='pack'>
<i class="fas fa-volume-up"></i>
</div>
</div>
<span id="current"></span>
<input type="range" id="seekBar" value="0">
<span id="duration"></span>
</div>
</div>
</body>
JS
var z = document.getElementById("check");
z.addEventListener('change', function() {
const reader = new FileReader()
reader.onload = function() {
var result = reader.result;
rest(result)
}
function rest(param){
var audioPlayer = new Audio(param);
child.appendChild(audioPlayer);
console.log(audioPlayer);
}
reader.readAsDataURL(z.files[0])
//child container
let child = document.createElement('div');
child.classList.add('items');
//overall parent
let parent = document.getElementById('container');
parent.appendChild(child);
let paragraph = document.createElement('p');
paragraph.innerHTML = z.files[0].name
child.appendChild(paragraph)
})
css
* {
padding: 0px;
margin: 0px;
box-sizing:border-box;
}
body{
background-color: #1F305E;
}
h1 {
text-align:center;
color:white;
margin-bottom:15px;
}
#container {
width:600px;
margin:0 auto;
}
input{
color: white;
}
.items {
border:1px solid #6CB4EE;
padding:20px;
margin-bottom:15px;
cursor:pointer;
color:white;
}
.items:hover {
color: rgba(108, 180, 238);
box-shadow: 0 5px 15px rgba(145, 92, 182, .4);
}
.control {
border:1px solid #696969;
background:#696969;
width:100%;
}
.icons {
text-align:center;
max-width:600px;
margin:0 auto;
}
i {
color:white;
font-size:25px;
cursor:pointer;
}
.flex{
display:flex;
justify-content:space-evenly;
}
p {
color:white;
}
header{
text-align:center;
margin-bottom:30px;
}
#seekBar {
width: 50%;
}
#pauseButt {
display: none;
}
i {
color: black;
}
button{
padding: 0px;
border: none;
background: none;
outline: none;
}
**HTML
自动点唱机
JS
var z=document.getElementById(“检查”);
z、 addEventListener('change',function(){
const reader=new FileReader()
reader.onload=函数(){
var result=reader.result;
休息(结果)
}
函数rest(param){
var audioPlayer=新音频(参数);
儿童。儿童(音频播放器);
控制台日志(音频播放器);
}
reader.readAsDataURL(z.files[0])
//子容器
让child=document.createElement('div');
child.classList.add('items');
//整体父母
让parent=document.getElementById('container');
父、子(子);
让段落=document.createElement('p');
段落.innerHTML=z.files[0]。名称
儿童.儿童(第段)
})
css
* {
填充:0px;
边际:0px;
框大小:边框框;
}
身体{
背景色:#1F305E;
}
h1{
文本对齐:居中;
颜色:白色;
边缘底部:15px;
}
#容器{
宽度:600px;
保证金:0自动;
}
输入{
颜色:白色;
}
.项目{
边框:1px实心#6CB4EE;
填充:20px;
边缘底部:15px;
光标:指针;
颜色:白色;
}
.项目:悬停{
颜色:rgba(108180238);
盒影:0 5px15px rgba(145,92,182,4);
}
.控制{
边框:1px实心#6969;
背景#6969;
宽度:100%;
}
.图标{
文本对齐:居中;
最大宽度:600px;
保证金:0自动;
}
我{
颜色:白色;
字体大小:25px;
光标:指针;
}
.flex{
显示器:flex;
对正内容:空间均匀;
}
p{
颜色:白色;
}
标题{
文本对齐:居中;
边缘底部:30px;
}
#西格巴{
宽度:50%;
}
#波塞布特{
显示:无;
}
我{
颜色:黑色;
}
钮扣{
填充:0px;
边界:无;
背景:无;
大纲:无;
}