Can';t调用Javascript函数两次
我正在尝试编写一个函数,使图像在屏幕上缓慢移动。有关的html格式如下: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
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中提供此代码吗?您还需要将计时器
放在全局范围内(假设您在移动图像
和调节
中都引用它)。(可能不是问题,但至少是问题。您正在传递计时器变量,然后才为其赋值!我进行了您建议的编辑,仍然没有得到预期的结果。