Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t调用Javascript函数两次_Javascript - Fatal编程技术网

Can';t调用Javascript函数两次

Can';t调用Javascript函数两次,javascript,Javascript,我正在尝试编写一个函数,使图像在屏幕上缓慢移动。有关的html格式如下: vardom,定时器; 函数initImage(){ dom=document.getElementById('animate').style; dom.position='绝对'; dom.top=“165px”; dom.left=“767px”; 监管(1115165); 调节(1115540); 调节(767540); 监管(767165); } 功能调节(xfinal,yfinal){ var timer=se

我正在尝试编写一个函数,使图像在屏幕上缓慢移动。有关的html格式如下:

vardom,定时器;
函数initImage(){
dom=document.getElementById('animate').style;
dom.position='绝对';
dom.top=“165px”;
dom.left=“767px”;
监管(1115165);
调节(1115540);
调节(767540);
监管(767165);
}
功能调节(xfinal,yfinal){
var timer=setInterval(函数(){moveImage(xfinal,yfinal)},1);
返回true;
}
函数moveImage(xfinal、yfinal){
var x=parseInt(dom.left.match(/\d+/);
var y=parseInt(dom.top.match(/\d+/);
如果((x==xfinal)&(y==yfinal)){clearInterval(timer);}
否则{
如果(x!=xfinal){
如果(x

一个问题是,您无法将
计时器
变量的内容传递到此行中的
setInterval()

 var timer = setInterval(moveImage, 1, xfinal, yfinal, timer);
因为只有在
setInterval()
返回后,
timer
的值才可用

因此,您将只传递该值的
undefined
,因此
moveImage()
中的
clearInterval()
将无法正常工作


解决此问题的通常方法是在某个更高级别的共享作用域中声明
计时器
变量,以便它在需要时可用。

而不是一次调用所有
调节
函数;设置一个队列

var-dom;
无功定时器;
var-queueIndex=0;
变量位置=[
[300, 0],
[300, 100],
[0, 100],
[0, 0]
];
函数initImage(){
dom=document.getElementById('animate').style;
dom.position='绝对';
dom.top=“0px”;
dom.left=“0px”;
regulate.apply(null,positions[queueIndex]);
}
功能调节(xfinal,yfinal){
计时器=设置间隔(移动图像,1,xfinal,yfinal);
返回true;
}
函数moveImage(xfinal、yfinal){
var x=parseInt(/\d+/.exec(dom.left)| 0);
var y=parseInt(/\d+/.exec(dom.top)| | 0);
如果((x==xfinal)&(y==yfinal)){
清除间隔(计时器);
queueIndex++;
if(位置[队列索引]){
regulate.apply(null,positions[queueIndex]);
}
}否则{
如果(x!=xfinal){
如果(x

您可以在plunkr中提供此代码吗?您还需要将
计时器
放在全局范围内(假设您在
移动图像
调节
中都引用它)。(可能不是问题,但至少是问题。您正在传递计时器变量,然后才为其赋值!我进行了您建议的编辑,仍然没有得到预期的结果。