2016-05-16 14 views
0

Dies ist der Code, den ichclearInterval nicht in Javascript arbeiten

<div> 
    <img src="robot.png" id="robotPic"> 
</div> 
<br /> 
<br /> 
<input type="button" name="Start" value="Start" id="Start" onclick="moveImage();"> 
<script type="text/javascript"> 
var moving = false; 
var screenWidth = window.innerWidth; 
var i = 0; 

function moveImage() { 
    if (!moving) { 
     moving = true; 
     var robotMoving = setInterval(function() { 
      document.getElementById("robotPic").style.paddingLeft = i + "px"; 
      i = i + 10; 
     }, 500); 
    } else { 
     clearInterval(robotMoving); 
    } 
} 
</script> 

Aus welchem ​​Grund auch immer, so weit haben, die robotPic bewegt sich nicht mehr, wenn ich die Start Taste wieder aus irgendeinem Grund klicken und ich nicht understabd

+1

* robotMoving * ist lokal für die Funktion. Wenn Sie * moveImage * ein zweites Mal aufrufen, handelt es sich um eine andere Instanz der Funktion und * robotMoving * -Variable. Einfache Lösung ist es, * robotMoving * global zu machen (aber es gibt bessere Möglichkeiten). – RobG

+1

@Spaceman: Wenn man es nicht auf false zurückstellt, erklärt das überhaupt nicht, warum der Roboter nie aufhört, sich zu bewegen. Es könnte die UNBEHANDELTE FRAGE erklären, warum der Roboter sich nicht mehr als einmal bewegen kann. – slebetman

+0

@slebetman Ihre richtige Ich denke, mein Verstand ist vor kurzem zu Schlussfolgerungen gezogen. Entschuldigungen, die ich vermasselt habe. Robg ist völlig richtig. – Spaceman

Antwort

5

Ihre Intervallreferenz robotMoving lebt nur in diesem Funktionsumfang. Das bedeutet, dass es jedes Mal, wenn Sie diese Funktion ausführen, auf undefiniert gesetzt wird (und Sie es mehrmals ausführen). Um es zu beheben, verschieben Sie die Variable robotMoving außerhalb dieser Funktion, und ändern Sie einfach ihren Wert von innen.

3

Ihr Intervall liegt außerhalb des Bereichs.

Vielleicht hinzufügen, versuchen Sie dies.

Shomz hat eine gute Erkundung in seinem Wunder, was passiert.

var moving = false, 
    screenWidth = window.innerWidth, 
    i = 0, 
    interval; 

function moveImage() { 
    if (!moving) { 
     moving = true; 
     interval = setInterval(function() { 
      document.getElementById("robotPic").style.paddingLeft = i + "px"; 
      i = i + 10; 
     }, 500); 
    } else { 
     clearInterval(interval); 
    } 
} 
+3

Genau, aber das behebt sein Problem nicht. Das Problem ist robotMoving ist eine lokale Variable – dman2306

+4

Sie beantworten eine Frage, die nicht gefragt wurde. Dies kann als zusätzliche Information zu einer Antwort in Ordnung sein, ist aber keine Antwort an sich. – slebetman

+0

Sorry, die Jungs haben ein bisschen versaut. – Spaceman

Verwandte Themen