2016-02-07 2 views
-1

Почему это не работает и как я могу улучшить его, чтобы он работал?Что-то перемещается с помощью цикла while

<!DOCTYPE html> 
<html> 
    <head> 
     <style type="text/css"> 
     #container{ 
     posistion: relative; 
     height: 500px; 
     width: 500px; 
     outline: 1px solid black;} 
     #character{ 
     posistion: absolute; 
     height: 50px; 
     width: 50px; 
     outline: 2px solid black; 
     background-color: #FF6600; 
     left: 0; 
     </style> 
     <body> 
      <div id="container"> 
      <div id="character"> 
      </div> 
      </div> 
      <script> 
       var character = getElementById('character'); 
       var container = getElementById('container'); 
       while (1 == 1){ 
       window.setTimeout(moveCharacter, 400);} 

       function moveCharacter(){ 
       character ++; 
       character.style.left = character + 'px';} 
      </script> 
     </body> 
    </head> 
</html> 
+0

'SetTimeout()' организует для функции будет называться в определенный момент времени в будущем. Вызов 'setTimeout()' немедленно возвращается. Он не приостанавливает выполнение. Вы можете использовать 'setInterval()', чтобы что-то повторялось с некоторым интервалом между вызовами. – Pointy

+0

Это закроет вашу машину, потому что 'while (1 == 1)' - это бесконечный цикл, который будет использовать все доступные циклы. _JavaScript_ не имеет методов стиля _sleep_, возможно, вы хотите использовать рекурсивный шаблон 'setTimeout'. –

+1

while (1 == 1) - бесконечный цикл ... – 91378246

ответ

0

С while (1 == 1) вы приведи блокировки заявление и не далее код выполняется. Попробуйте заменить

while (1 == 1) { 
    window.setTimeout(moveCharacter, 400);} 

с setInterval():

window.setInterval(moveCharacter, 400); 
+0

Лично предпочитайте цикл _setTimeout_, чем _setInterval_, на случай, если у вас есть ситуация, которая может вызвать каскад; '(function step() {moveCharacter(); window.setTimeout (шаг, 400);}());' –

+0

@PaulS. как бы вы нарушили цикл таким образом? Я имею в виду, как вы имитируете 'clearInterval()'? – LostMyGlasses

+0

Я втиснул это в один лайнер, для полной реализации вы либо установили флаги, либо отслеживали индексы, которые вы можете проверить. Это не слишком сложно, например. 'function timeoutLoop (fn, delta) {function step() {if (step.cancelled) return; п(); window.setTimeout (шаг, дельта);} window.setTimeout (шаг, дельта); return step;} 'и cancel by' foo.cancelled = true; ' –

Смежные вопросы