javascript - Warum muss ich eine Eigenschaft vor dem Verzögerer dieser Bewegungsfunktion anpassen?
为情所困
为情所困 2017-05-19 10:18:30
0
1
442

Mit dieser Funktion wird ein Animationseffekt erstellt:

function moveElement(elementId,final_x,final_y,interval){
//            名称            id       x轴位置    y轴位置   速度
    var elem=document.getElementById(elementId);
    var x_pos=parseInt(elem.style.left);
    var y_pos=parseInt(elem.style.top);
    if(elem.movement){
        clearTimeout(elem.movement);
    }            //若elem已存在一个movement属性,先结束它
    if(y_pos==final_y&&x_pos==final_x){
        return true;
    }
    if(y_pos<final_y){
        dist=Math.ceil((final_y-y_pos)/30);//每运动一次的数值
        y_pos=y_pos+dist;
    }
    if(y_pos>final_y){
        dist=Math.ceil((y_pos-final_y)/30);
        y_pos=y_pos-dist;
    }
    if(x_pos<final_x){
        dist=Math.ceil((final_x-x_pos)/30);
        x_pos=x_pos+dist;
    }
    if(x_pos>final_x){
        dist=Math.ceil((x_pos-final_x)/30);
        x_pos=x_pos-dist;
    }
    elem.style.top=y_pos+"px";
    elem.style.left=x_pos+"px";
    repeat="moveElement('"+elementId+"',"+final_x+","+final_y+","+interval+")"
    elem.movement=setTimeout(repeat,interval)
//  自定义的属性movement,它属于elem
}

Über den letzten Satz elem.movement=setTimeout(repeat,interval)
und den obigen Satz if(elem.movement){

    clearTimeout(elem.movement);
}

Ich weiß, dass ihre Funktion darin besteht, die zuletzt ausgeführte Funktion bei erneuter Ausführung zu beenden, aber warum meldet sie einen Fehler, wenn sie direkt Movement=setTimeout(repeat,interval) schreibt, während das Schreiben von elem.movement ausreicht?

为情所困
为情所困

Antworte allen(1)
阿神

movement 和 elem 是一一对应的关系。

如果按你的写法,movement 就变成了全局变量。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage