Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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
Javascript 等待函数完成,然后才能再次执行_Javascript_Html - Fatal编程技术网

Javascript 等待函数完成,然后才能再次执行

Javascript 等待函数完成,然后才能再次执行,javascript,html,Javascript,Html,我的图像上有一个onclick事件,它调用一个函数。现在我不想在函数仍在运行时再次调用它。我该怎么做 HTML: Javascript: 函数myMove(){ var elem=document.getElementById(“rocketEE”); var pos=-1100; 变量id=设置间隔(第1帧); 函数框架(){ 如果(位置==600){ 清除间隔(id); }否则{ pos++; elem.style.left=pos+“px”; } } } 提前谢谢 全局变量是一种方

我的图像上有一个onclick事件,它调用一个函数。现在我不想在函数仍在运行时再次调用它。我该怎么做

HTML:


Javascript:


函数myMove(){
var elem=document.getElementById(“rocketEE”);
var pos=-1100;
变量id=设置间隔(第1帧);
函数框架(){
如果(位置==600){
清除间隔(id);
}否则{
pos++;
elem.style.left=pos+“px”;
}
}
}

提前谢谢

全局变量是一种方法,但是您不应该养成在这样的事情中使用全局变量的习惯。更好的方法是将该变量存储在使用它的对象的范围内。元素本身是一个很好的地方:

function myMove() {
    var elem = document.getElementById("rocketEE");   
    if(elem.isAnimating)
        return;

    var pos = -1100;
    elem.isAnimating = true;
    var id = setInterval(frame, 1);
    function frame() {
        if (pos == 600) {
            clearInterval(id);
            elem.isAnimating = true;
        } else {
            pos++; 
            elem.style.left = pos + 'px'; 
        }
    }
} 

请注意:这不是制作动画的好方法,一方面,1毫秒的速度会太快,还有更好的方法-例如,全局变量是一种方法,但是你不应该养成在这样的事情上使用全局变量的习惯。更好的方法是将该变量存储在使用它的对象的范围内。元素本身是一个很好的地方:

function myMove() {
    var elem = document.getElementById("rocketEE");   
    if(elem.isAnimating)
        return;

    var pos = -1100;
    elem.isAnimating = true;
    var id = setInterval(frame, 1);
    function frame() {
        if (pos == 600) {
            clearInterval(id);
            elem.isAnimating = true;
        } else {
            pos++; 
            elem.style.left = pos + 'px'; 
        }
    }
} 

请注意:这不是一种制作动画的好方法,一方面,1毫秒的速度会太快,还有更好的方法,例如

有什么问题?错误?即使在应该完成之后,它仍然运行吗?@Ifaruki问题是,当它仍然运行时,你可以调用它。但现在已经解决了问题是什么?错误?即使在应该完成之后,它仍然运行吗?@Ifaruki问题是,当它仍然运行时,你可以调用它。但现在问题解决了