2012-03-07 55 views
1

大家播放由jquery更改的新音频源

我写了简单的音乐播放器,但是我有一个问题。我用ajax从文件php中获得新的源代码,这工作正常,但我不知道如何播放新歌。简单的audio.play()不起作用。我尝试修复这是我的代码:

function timer(){ 
    timeleft = $("span#timeleft"); 
    slider = $("div#slider"); 
    $(audio).bind('timeupdate', function(){ 
     var rem = parseInt(audio.duration - audio.currentTime, 10), 
     pos = (audio.currentTime/audio.duration) * 315, 
     mins = Math.floor(rem/60, 10), 
     secs = rem - mins*60; 

     timeleft.text('- ' + mins + ':' + (secs > 9 ? secs : '0' + secs)); 
     slider.css({width: pos + 'px'}); 
    }); 
} 

$(document).ready(function(){ 
    audio = $("audio#audio-player-header").get(0); 

    $("div#controls").click(function(){ 
     $(this).toggleClass("pause"); 
     if(audio.paused){ 
      audio.play(); 
      timer(); 
     }else{ 
      audio.pause(); 
     } 
    }); 

    audio.addEventListener("ended", function(){ 
      $.post("php/player.php", function(result){ 
       audio.src = result; 
      }); 
      audio.play(); // here is the problem 
      timer(); 
    }); 
}); 

和HTML:

<div id="player"> 
        <div id="controls" class="play"></div> 
        <div id="music-title"> 
         <div id="slider"> 
          <div id="wrap-music-title"> 
           <p id="music-title">Jamie T - Chaka Demus</p> 
          </div> 
         </div> 
        </div> 
        <span id="timeleft"></span> 
        <div id="player-header"> 
        <audio id="audio-player-header" src="music/rock/Jamie T - Chaka Demus.mp3"> 
        </audio> 
        </div> 
       </div> 

我的计算器和网络解决方案的一些发现,但没有在这里工作。预先感谢您的帮助。

回答

0

您创建了一个竞争条件,在您的ajax调用返回之前调用audio.play()。您可以(A)听取音频canplay事件,然后触发播放或(B)只设置音频标签的autoplay属性。

选项A:

audio.addEventListener("ended", function(){ 
    $.post("php/player.php", function(result){ 
     audio.src = result; 
    }); 
}); 

audio.addEventListener("canplay", function(){ 
    audio.play(); 
}); 

选项B:

<audio autoplay id="audio-player-header" src="music/rock/Jamie T - Chaka Demus.mp3"> 
+0

布赖恩,感谢快速回答。之前我曾考虑过自动播放,即使我试图在第一首歌曲结束时将其放入代码中,但它也不起作用。我已经检查了你的建议,但是第一首歌曲后播放器仍然停止播放,这里是我的网站:http://wovich.net46.net/musicon/也许这只会让我生气:D – Wovich 2012-03-07 19:38:16

+0

第二首MP3有什么问题你正在尝试加载('http://wovich.net46.net/musicon/music/rap/Lady Leshur Lego.mp3')。尝试在浏览器中点击该网址,您将看到该文件无法播放。我从你的页面获取了代码,并将其放在我的服务器上,如果你使用有效的音频文件更新src,它就能正常工作。 – 2012-03-08 01:25:41

+0

我不能相信一个有效的源代码花了我两周的时间考虑代码中的错误。再次感谢您的帮助,解决方案非常紧密。 – Wovich 2012-03-08 14:23:01