播放/暂停带有JavaScript问题的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:

我在暂停当前正在播放的mp3时遇到问题

例如,如果我像这样运行我的函数:
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!对不起,我不明白你的意思