Javascript 功能赢得';t递归
我试图制作一个“网络播放器”,当你点击播放按钮时播放音乐,并在一个栏上显示你在曲目中的距离。我制作了一个函数,可以播放音频,并检查您要设置播放条宽度的轨迹距离,但就我而言,我无法让它递归。我知道这个功能是有效的,因为当你点击播放按钮时,播放条会跳到正确的位置,但我似乎无法自动执行。代码如下:Javascript 功能赢得';t递归,javascript,Javascript,我试图制作一个“网络播放器”,当你点击播放按钮时播放音乐,并在一个栏上显示你在曲目中的距离。我制作了一个函数,可以播放音频,并检查您要设置播放条宽度的轨迹距离,但就我而言,我无法让它递归。我知道这个功能是有效的,因为当你点击播放按钮时,播放条会跳到正确的位置,但我似乎无法自动执行。代码如下: function play(x) { var audio = document.getElementById(x); audio.play(); var progress = audio.c
function play(x) {
var audio = document.getElementById(x);
audio.play();
var progress = audio.currentTime;
var duration = audio.duration;
var percent = progress/duration;
var width = percent*100;
var progbar = document.getElementById("play-line-elapsed");
var width = width + "%";
progbar.style.width = width;
setTimeout(play("Bring-Out-Yer-Dead"), 5000);
}
const createClock = setInterval(play, 100);
到目前为止,我已经尝试了while循环、do while循环、setTimeout和setInterval。我也是一个javascript的完全初学者,所以当有人向我指出它时,这可能是非常明显的。提前感谢以下是应该可以使用的代码
function play(x) {
var audio = document.getElementById(x);
audio.play();
var progress = audio.currentTime;
var duration = audio.duration;
var percent = progress/duration;
var width = percent*100;
var progbar = document.getElementById("play-line-elapsed");
var width = width + "%";
progbar.style.width = width;
setTimeout(function () {play("Bring-Out-Yer-Dead")}, 5000);
}
const createClock = setTimeout(function () {play("Bring-Out-Yer-Dead")}, 100);
您所做的是创建一个间隔,每0.1秒调用play
,不带任何参数。我想这是行不通的,因为函数需要一个参数
您在播放
结束时设置的超时
也不起作用,因为您只是在调用它。您应该提供一个函数对象(不是非常正确的词,但是您得到了它)来设置TIMOUT,而不是调用它。这样做的方式是调用play
,并将其返回值(未定义的setTimeout
)赋给setTimeout
,这使得setTimeout
什么也不做
更正后的代码会创建一个超时,在0.1秒后调用play
,然后play
每5秒继续调用自己
您必须为setTimeout/setInterval
提供一个0 arity函数,这意味着该函数不接受任何参数。我为此使用了一个匿名函数,但是您可以编写另一个没有参数的函数,并在那里使用它
但我认为你最好使用事件。我没有测试过任何一个,但是这些事件似乎对你正在尝试做的事情很有希望
以下是应该有效的代码
function play(x) {
var audio = document.getElementById(x);
audio.play();
var progress = audio.currentTime;
var duration = audio.duration;
var percent = progress/duration;
var width = percent*100;
var progbar = document.getElementById("play-line-elapsed");
var width = width + "%";
progbar.style.width = width;
setTimeout(function () {play("Bring-Out-Yer-Dead")}, 5000);
}
const createClock = setTimeout(function () {play("Bring-Out-Yer-Dead")}, 100);
您所做的是创建一个间隔,每0.1秒调用play
,不带任何参数。我想这是行不通的,因为函数需要一个参数
您在播放
结束时设置的超时
也不起作用,因为您只是在调用它。您应该提供一个函数对象(不是非常正确的词,但是您得到了它)来设置TIMOUT,而不是调用它。这样做的方式是调用play
,并将其返回值(未定义的setTimeout
)赋给setTimeout
,这使得setTimeout
什么也不做
更正后的代码会创建一个超时,在0.1秒后调用play
,然后play
每5秒继续调用自己
您必须为setTimeout/setInterval
提供一个0 arity函数,这意味着该函数不接受任何参数。我为此使用了一个匿名函数,但是您可以编写另一个没有参数的函数,并在那里使用它
但我认为你最好使用事件。我没有测试过任何一个,但是这些事件似乎对你正在尝试做的事情很有希望
设置超时(()=>播放(“拿出你的死亡”),5000)
如果要将undefined传递给setTimeout,请将其包装在函数中以传递该函数。另外,setInterval正在调用play with x=undefined除了正确使用setTimeout
之外,您当前还将启动播放器(audio.play()
)与更新进度条混为一谈。这是两个独立的操作。您应该考虑使用播放器的进度
事件来更新进度条:设置超时(()=>播放(“拿出死亡”),5000
如果要将undefined传递给setTimeout,请将其包装在函数中以传递该函数。另外,setInterval正在调用play with x=undefined除了正确使用setTimeout
之外,您当前还将启动播放器(audio.play()
)与更新进度条混为一谈。这是两个独立的操作。您应该考虑使用播放机的进度
事件来更新您的进度条:谢谢:)这是有效的。不过,我会看一看事件,这似乎确实是个好消息。不过,我会看一看事件,这似乎很有希望