播放/暂停带有JavaScript问题的MP3
我在暂停当前正在播放的mp3时遇到问题 例如,如果我像这样运行我的函数:播放/暂停带有JavaScript问题的MP3,javascript,html,audio,mp3,Javascript,Html,Audio,Mp3,我在暂停当前正在播放的mp3时遇到问题 例如,如果我像这样运行我的函数:playSong(drake)它开始运行if语句第一部分的代码,播放“drake”对象的MP3,并将songValue设置为2 问题是,如果我第二次运行它,它不会暂停歌曲,但我的console.log会显示在控制台中,因此当我第二次单击它时,它肯定会运行if语句的第二部分,但由于某些原因它不会暂停歌曲 //object with mp3 audio var drake = { value: 3, name:
playSong(drake)
它开始运行if语句第一部分的代码,播放“drake”对象的MP3,并将songValue设置为2
问题是,如果我第二次运行它,它不会暂停歌曲,但我的console.log会显示在控制台中,因此当我第二次单击它时,它肯定会运行if语句的第二部分,但由于某些原因它不会暂停歌曲
//object with mp3 audio
var drake = {
value: 3,
name: 'Energy',
artist: 'Drake',
audio: 'energy.mp3', //
img: '<img style="width: 50%; margin-right: 25%; margin-left: 25%; margin-top: 10%;" src="http://www.getrichrapping.com/wp-content/uploads/2015/08/Drake-Energy.jpg">'
};
songValue = 1;
// plays and SHOULD pause a Song
function playSong(object) {
var Song = new Audio(object.audio);
//plays the song
if (songValue == 1) {
Song.play();
songValue = 2;
// SHOULD pause the song when the functions is runned the second time
} else if (songValue == 2) {
console.log("Is it working ?"); // String to test if the "else if" gets runned
Song.pause();
songValue = 1;
}
};
//具有mp3音频的对象
var drake={
价值:3,
名称:'能源',
艺术家:“德雷克”,
音频:“energy.mp3”//
img:'
};
数值=1;
//播放并应暂停一首歌曲
函数播放歌曲(对象){
var Song=新音频(object.Audio);
//播放歌曲
如果(songValue==1){
歌曲。游戏();
数值=2;
//第二次运行函数时,应暂停歌曲
}else if(songValue==2){
log(“它在工作吗?”);//测试“elseif”是否运行的字符串
歌曲。暂停();
数值=1;
}
};
将var Song=新音频(object.Audio)移到playSong之外
实际上,每次调用该函数时都会生成一个新的音频
当然,您需要对引用object.audio进行更改,因为该对象不是全局对象
更好的方法是这样做:
//具有mp3音频的对象
var drake={
价值:3,
名称:'能源',
艺术家:“德雷克”,
音频:'https://www.w3schools.com/html/horse.mp3', //
img:'
};
数值=1;
//播放并应暂停一首歌曲
函数播放歌曲(对象){
//播放歌曲
如果(songValue==1){
var player=document.getElementById('song');
var sourceMp3=document.getElementById('sourceMp3');
sourceMp3.src=object.audio;
player.load();//刚开始缓冲(预加载)
player.play();//开始播放
数值=2;
//第二次运行函数时,应暂停歌曲
}else if(songValue==2){
log(“它在工作吗?”);//测试“elseif”是否运行的字符串
var player=document.getElementById('song');
如果(!player.paused)
player.pause();
数值=1;
}
};代码>
您的浏览器不支持音频元素。
播放歌曲
您应该像这样将音频对象存储在基本对象中
if (object.song == undefined){
object.song = new Audio(object.audio);
}
并使用object.song
代替song变量
您可以使用对象.song.paused(布尔值)
了解歌曲是否暂停,然后再次启动歌曲。您应该有两个独立的功能。一个用于创建音频元素,另一个用于播放/暂停给定音频元素
您的问题之一是,每次调用playSong()
,都会创建一个全新的音频元素
解决方案
var drake = {
value: 3,
name: 'Energy',
artist: 'Drake',
audio: 'energy.mp3', //
img: '<img style="width: 50%; margin-right: 25%; margin-left: 25%; margin-top: 10%;" src="http://www.getrichrapping.com/wp-content/uploads/2015/08/Drake-Energy.jpg">'
};
var audioElement = playSong(drake); // load song and play it
togglePlayPause(audioElement); // pause song
function playSong(object) {
var Song = new Audio(object.audio);
Song.play();
return Song;
}
function togglePlayPause(audioElement) {
if (audioElement.paused) {
audioElement.play();
} else {
audioElement.pause();
}
}
var-drake={
价值:3,
名称:'能源',
艺术家:“德雷克”,
音频:“energy.mp3”//
img:'
};
var audioElement=播放歌曲(德雷克);//加载歌曲并播放它
切换播放暂停(audioElement);//暂停曲
函数播放歌曲(对象){
var Song=新音频(object.Audio);
歌曲。游戏();
返回歌曲;
}
功能切换播放暂停(audioElement){
if(audioElement.paused){
audioElement.play();
}否则{
audioElement.pause();
}
}
首先使用playSong()
函数创建音频元素并将其存储在变量中。然后将音频元素传递到togglePlayPause()
,以切换其播放状态
在本例中,我播放歌曲,然后立即调用togglePlayPause()
再次暂停
此外,您不需要将播放状态保存在单独的变量中。我刚刚在音频元素上使用了.paused
属性,如果播放器已暂停,该属性将返回true。如果确实需要单独的变量,则应将其作为新属性.isplay
存储在drake对象中
songValue在哪里定义?object.value?哦,对不起,我忘了添加它,但我刚刚更新了itThanks,但是var Song中的“object”没有定义,我需要这样的对象,因为我想播放不同的音频mp3'stry,以便通过一些javascript代码获得音频实例-可能是getElementById!对不起,我不明白你的意思