如何在不刷新网页的情况下播放歌曲?

时间:2013-10-14 18:03:23

标签: javascript html5 audio html5-audio

我只想在用户按下“播放”按钮时播放歌曲,

无需等待加载所有21首歌曲。

当我按下“播放”按钮时,页面会像刷新一样跳起来,这是不正常的。

我可以做些什么来改进我的代码。

请尝试播放example site中的歌曲并查看问题。

非常感谢。

var Music = {


        init:function(){

                        song = new Audio();
                        //speaKer = document.getElementById("imgSpeaker");
                        this.volume = 0.08;
                        this.isMute = false;
                        canPlayMP3 = (typeof song.canPlayType === "function" && song.canPlayType("audio/mpeg") !== "");
                        song.src = canPlayMP3 ? "http://rafih.co.il/wp-content/uploads/2013/07/1.mp3" : "http://rafih.co.il/wp-content/uploads/2013/07/1.ogg";
                        song.preload = 'auto';
        },

    /*  start:function(){
                        song.src = canPlayMP3 ? "http://rafih.co.il/wp-content/uploads/2013/07/1.mp3" : "http://rafih.co.il/wp-content/uploads/2013/07/1.ogg";
                        song.volume = 0.08;
                        song.autoplay = true;
                        song.load();
        },*/

         play: function () {
                        song.volume = 0.08;
                        song.autoplay = true;
                        song.load();
                       // Music.speaker();

                    },

        stop: function () {
                        if (!song.ended) {
                            song.pause();
                        }   
                    },

        next: function () {
                        if (curr < count) {
                            curr++;
                        }else curr = 1;
                        song.src = canPlayMP3 ? "http://rafih.co.il/wp-content/uploads/2013/07/" + curr + ".mp3" : "http://rafih.co.il/wp-content/uploads/2013/07/" + curr + ".ogg";


        },          


      };
      function load() {
        Music.init();

      }

2 个答案:

答案 0 :(得分:0)

您需要从播放按钮事件处理程序返回false,以防止页面滚动到顶部。

变化:

<div id="play" onclick='Music.play()'>

要:

<div id="play" onclick='Music.play(); return false;'>

答案 1 :(得分:0)

这是因为您的链接中有anchor,例如href="#"。一个非常简单的修复方法是将return false;添加到您的内联处理程序属性中,例如onclick="Music.play(); return false;",但这不是一个好方法,并且被认为是一种不好的做法。

相反,您可以通过编程方式添加处理程序,它还可以使您的代码更加模块化和可测试:

var Music = {
    init: function (options) {
        var playBtn = this.playBtn = document.querySelector(options.playBtn);

        playBtn.addEventListener('click', this._onPlayBtnClick.bind(this));
        //...

        return this;
    },
    _onPlayBtnClick: function (e) {
        e.preventDefault(); //prevents the browser's default behaviour
        this.play();
    },
    //...
};

然后你可以这样做:

function load() {
    var musicController = Object.create(Music).init({
        playBtn: '#play',
        //...
    });
}

您也可以将其用作单身:

Music.init({ ... });