带有音频标签和js的歌曲的多重复制

时间:2017-06-12 21:44:34

标签: javascript html audio

我有一个像这样的js函数:

function riproduci(link) {
var ar = link.split("*");
var s = ar[0];
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if(this.readyState == 4 && this.status == 200) {
    }
};
xhttp.open("GET", "incremento.php?link="+s, true);
xhttp.send();
audio.load(s);
audio.play();
}

在link参数中有一系列用*字符分隔的链接,因此我将字符串拆分为不同的链接。所以,为了尝试我已经发送到音频脚本数组中的链接0,现在我想执行此操作:当一首歌完成时(所以,带有onEnded()事件的东西)去取下一个链接并自动将其加载到播放器。我不知道如何才能访问刚刚结束的链接,以便选择下一个。

请不要考虑作为该功能一部分的ajax代码,该代码与我向您提出的问题无关。

1 个答案:

答案 0 :(得分:0)

我试着根据给出的指令编写这个函数:

function riproduci(link) {
let i = 0;
var ar = link.split("*");
var n = ar.length;
var audio = document.querySelector("audio");
audio.addEventListener("ended", rp);
audio.load(ar[0]);
audio.play();
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if(this.readyState == 4 && this.status == 200) {
        document.getElementById("titolo").innerHTML = this.responseText;
    }
};
xhttp.open("GET", "incremento.php?link="+ar[0], true);
xhttp.send();
function rp(e){
    i++;
    i = (i >= n) ? 0 : i;
    var l = ar[i];
    this.load(ar[i]);
    this.play();
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
            document.getElementById("titolo").innerHTML = this.responseText;
        }
    };
    xhttp.open("GET", "incremento.php?link="+l, true);
    xhttp.send();
    }
}

但我不知道为什么,它进入一个无限循环,它开始播放链接序列中的所有歌曲,但在不到一秒的时间内从一个播放到另一个。怎么了?

更新:播放器加载的歌曲不到一秒,如果我执行riproduci()函数,音频标签的src不会改变,空的“歌曲”会进入无限循环。 / p>

更新2:这是我的音频播放器。

<div id="pers_player_footer">
        <script src="../audiojs/audio.min.js"></script>
        <script>
            audiojs.events.ready(function() {
            var as = audiojs.createAll();
            window.audio = as[0];
            });
        </script>
        <audio id="audio" src="../songs/empty.mp3" autoplay='true'/>
</div>

更新3:更新的功能

function riproduci(link) {
var as = audiojs.createAll();
let i = 0;
var ar = link.split("*");
var n = ar.length;
var audio = document.querySelector("audio");
audio.addEventListener("ended", rp);
audio.src = ar[0];
audio.load();
audio.play();
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if(this.readyState == 4 && this.status == 200) {
        document.getElementById("titolo").innerHTML = this.responseText;
    }
};
xhttp.open("GET", "incremento.php?link="+ar[0], true);
xhttp.send();
function rp(e){
    i++;
    i = (i >= n) ? 0 : i;
    var l = ar[i];
    var as = audiojs.createAll();
    audio.src = ar[i];
    audio.load();
    audio.play();
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
            document.getElementById("titolo").innerHTML = this.responseText;
        }
    };
    xhttp.open("GET", "incremento.php?link="+l, true);
    xhttp.send();
    }
}

这是我找到音频库的链接:https://kolber.github.io/audiojs/