setTimeout无法使用javascript和svg
这是我的网站granite.sru.edu/~jaw1005/progress.php的url 问题是我有5个svg元素作为按钮,每个按钮都改变了图形 我想做一个类似这样的函数setTimeout无法使用javascript和svg,javascript,Javascript,这是我的网站granite.sru.edu/~jaw1005/progress.php的url 问题是我有5个svg元素作为按钮,每个按钮都改变了图形 我想做一个类似这样的函数 function play(evt){ setTimeout(doButtons5(evt),3000) setTimeout(doButtons4(evt),3000) setTimeout(doButtons4(evt),3000) } 其目的是将数据中的更改显示为动画 当我点击调用play函数的黑色
function play(evt){
setTimeout(doButtons5(evt),3000)
setTimeout(doButtons4(evt),3000)
setTimeout(doButtons4(evt),3000)
}
其目的是将数据中的更改显示为动画
当我点击调用play函数的黑色圆圈时,什么都没有发生,因此任何帮助都会受到极大的欢迎
下面是一段代码,我不知道它是否有用
function doButtons5(evt){
http5.open('get',"http://granite.sru.edu/~jaw1005/getdata5.php");
http5.onreadystatechange = getData5;
http5.send(null);
}
function getData5(){
if(http5.readyState == 4){
sampsonnnn=http5.responseText
doSVGStuff5(sampsonnnn)
}
}
根据window.setTimeout文档,您必须像这样使用超时:
function play(evt){
setTimeout(doButtons5,3000)
setTimeout(doButtons4,3000)
setTimeout(doButtons4,3000)
}
您将同步模式与异步函数混合。我可以推荐的第一件事是使用一个好的异步模式库,比如或至少是。原因是代码可读性和编码人员的理智 当您调用像
doButtons5(evt)
这样的函数时,它会立即执行,该调用的返回值将传递给setTimeout
。根据OP的例子,我推断这不是期望的愿望。我基于使用传入的evt
变量,当setTimeout
最终调用回调时,如果在play
函数之外引用该变量,则该变量将不存在。示例doButton5
没有使用传递的变量evt
是否您需要保留对该对象的引用?我将假设情况就是这样,并展示如何使用部分应用程序来促进这样的工作
另外,doButton5
示例看起来使用的是一种XHR形式,它也是异步的。因此,延迟执行不需要setTimeout
部分应用
这将返回一个新函数,该函数在闭包中绑定了evt
变量
setTimeout的帮助程序
接下来,我们需要链接setTimeout
s,为了方便起见,让我们为此编写一个帮助函数
function asyncFns() {
// We could pass an array but for now this is good enough.
var funcs = Array.prototype.slice.call(arguments, 0);
var timeout = 3000;
for (var i = 0; i < func.length; i++) {
setTimeout(funcs[i], timeout);
}
}
您正在立即执行
doButtons5
,并将返回值传递给setTimeout
,该值是未定义的。您必须将函数传递给setTimeout
。请阅读文档:。老兄,我有时会觉得自己很笨吗,非常感谢你的帮助。这就是你要找的吗?
function asyncFns() {
// We could pass an array but for now this is good enough.
var funcs = Array.prototype.slice.call(arguments, 0);
var timeout = 3000;
for (var i = 0; i < func.length; i++) {
setTimeout(funcs[i], timeout);
}
}
function play(evt) {
asyncFns(
bindEvt(doButtons5, evt),
bindEvt(doButtons4, evt),
bindEvt(doButtons4, evt)
);
}