首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >html5音频歌曲只播放阵列中的前2个吗?

html5音频歌曲只播放阵列中的前2个吗?
EN

Stack Overflow用户
提问于 2013-06-30 14:11:49
回答 2查看 1.5K关注 0票数 0

只有我的前两首歌在播放,然后什么也没有发生。我不确定为什么它工作了两次,然后就停止了?我希望它永远播放通过一系列的歌曲。我不能让我的倒带也起作用,我想要它,所以当你点击倒带按钮时,歌曲会转到-,在数组上,如果小于0,它会转到array.length歌曲。

全局变量:

代码语言:javascript
复制
var btnPlay = new Button(561,743,33,92);
var btnRewind = new Button(0,0,800,300); //entire canvas just to test

var song1 = new Audio("songs/loop1.mp3");
var song2 = new Audio("songs/loop2.mp3");
var song3 = new Audio("songs/loop3.mp3");
var song4 = new Audio("songs/loop4.mp3");
var song5 = new Audio("songs/loop5.mp3");
var song6 = new Audio("songs/loop6.mp3");
var song7 = new Audio("songs/loop7.mp3");
var song8 = new Audio("songs/loop8.mp3");
var song9 = new Audio("songs/loop9.mp3");
var song10 = new Audio("songs/loop10.mp3");
var song11 = new Audio("songs/loop11.mp3");
var rewindClicked = false;
var songList = [];
var currentSong = 1;

songList.push(song1,song2,song3,song4,song5,song6,song7,song8,song9,song10,song11);

var song = songList[0];

回放单击按钮的方法:

代码语言:javascript
复制
function mouseClickedButtons(e)
{
alert("hi"); //works
   if(btnRewind.checkClicked())
   {
   alert("hey"); //does not
   rewindClicked = true;
     NextSong();

   }

}

更改歌曲方法:

代码语言:javascript
复制
function NextSong()
{
document.removeEventListener('ended',NextSong);

if(rewindClicked ==true)
{
currentSong--;
}
else
{
currentSong++;
}

if(currentSong > songList.length);
{
currentSong = 1;
}

if(currentSong < 0)
{
currentSong = songList.length; 
}

songList[currentSong].play();
rewindClicked = false;




songList[currentSong].addEventListener('ended', NextSong);
}

监听程序:

代码语言:javascript
复制
song.addEventListener('ended', NextSong);

按钮对象(我让它在一个播放按钮中工作,所以它可以工作)

代码语言:javascript
复制
function Button(xL,xR,yT,yB)
{
this.xLeft = xL;
this.xRight = xR;
this.yTop = yT;
this.yBottom = yB;
}



Button.prototype.checkClicked = function()
{

  if(this.xLeft <= mouseX && mouseX <= this.xRight && this.yTop <= mouseY && mouseY <= this.yBottom)
  {

     return true;
  }

}
EN

回答 2

Stack Overflow用户

发布于 2013-06-30 16:12:43

播放HTML5音频的基本代码也带有控件:

代码语言:javascript
复制
var i = 0; // song index
var songList = [
    'songs/loop1.mp3', 'songs/loop2.mp3', 'songs/loop3.mp3', 'songs/loop4.mp3',
    'songs/loop5.mp3', 'songs/loop6.mp3', 'songs/loop7.mp3', 'songs/loop8.mp3'
];

// create audio element
var ae = document.createElement('audio');
ae.id = 'audioplayer';
ae.src = songList[0];
document.body.appendChild(ae);
// create controls
var btnPlay = document.createElement('button');
var btnPrev = document.createElement('button');
var btnNext = document.createElement('button');
var testDiv = document.createElement('div');
btnPlay.innerHTML = 'Play/Pause';
btnPrev.innerHTML = 'Previous song';
btnNext.innerHTML = 'Next song';
testDiv.id = "test";
document.body.appendChild(btnPlay);
document.body.appendChild(btnPrev);
document.body.appendChild(btnNext);
document.body.appendChild(testDiv);

//add event handlers
ae.onplay = function () {
    testDiv.innerHTML = 'Now playing #' + (i+1) + ' ' + songList[i];
};
ae.onended = function(){
    NextSong();
};
btnPlay.onclick = function() {
    if (ae.paused) ae.play();
    else ae.pause();
};
btnPrev.onclick = PrevSong;
btnNext.onclick = NextSong;
ae.play();

function PrevSong() {
    i = (i > 0)? i - 1 : songList.length - 1; // choose previous index
    ae.setAttribute("src", songList[i]);
    ae.play();
}
function NextSong() {
    i = (i < songList.length - 1)? i + 1 : 0; // choose next index
    ae.setAttribute("src", songList[i]);
    ae.play();
}

工作小提琴:http://jsfiddle.net/F35Fw/1/

HTML5音频标签和mp3播放在IE8和老版本的火狐中不受支持,所以为了向后兼容,你应该使用一些flash-based fallback

以下是工作脚本with the flash object的示例:http://pastebin.com/WDzEQGtn

票数 0
EN

Stack Overflow用户

发布于 2013-06-30 16:13:14

checkClicked在哪里定义?对该函数的调用似乎不能正确操作。

您没有向我们展示单击按钮的绑定,但无论如何,我会分别绑定每个按钮,这样您就不需要检查哪个按钮被单击了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17387702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档