2017-02-22 25 views
-4

Итак, я сделал код для некоторой курсовой работы, код, как предполагается, запустит функцию загрузки страницы, которая затем запустит функцию изменения изображения светофора на экране. Предположим, что мы продолжаем меняться навсегда, однако программа запускается или не загружается, когда я пытаюсь запустить. Прежде чем вы предлагаете проблему, переменная, используемая в состоянии, не изменилась, я попытался изменить ее в следующем коде. когда я запускал его в хром-отладчике, это то, что появилось; 'Uncaught SyntaxError: Неожиданный токен <'.Ошибка JavaScript while: Неожиданный токен

<DOCTYPE html> 
<html> 
    <body onload="infinity()"> 
     <p></p> 
     <h1>Traffic Light Sequence</h1> 
     <img id ="trafficlight" src="r.jpg"> 
     <script> 
      var images = [ 
       "r.jpg", 
       "randy.jpg", 
       "g.jpg", 
       "y.jpg" 
      ]; 
      var counter = 0; 
      function start() { 
       counter = counter + 1; 
       if(counter == images.length) counter=0; 
       var image = document.getElementById("trafficlight"); 
       image.src=images[counter]; 
      } 
      var a = 100; 
      function infinity() { 
       while (200>a) { 
        setTimeout(start(), 3000); 
       } 
       a = a - 25; 
      } 
     </script> 
    </body> 
</html> 
+0

'a = a - 25;' должен находиться внутри цикла. Кроме того, удалите скобки на 'start()' для 'setTimeout' – 4castle

+3

Вы не сказали, что такое ошибка. Это очень важно. – Carcigenicate

+0

Откройте консоль, используйте отладчик и сообщите нам, что именно не так, и почему это смущает вас. – csmckelvey

ответ

0

Вместо настройки while и setTimeout используйте setInterval. Приведенный ниже код будет работать, я думаю. Это изменит изображение в 100 раз

var url="http://www.hdwallpapers.in/thumbs/2017/"; 
 
var a=0,Handler; 
 
var images = ["yosemite_national_park_winter_4k-t1.jpg","namib_coastal_desert_4k-t1.jpg","beach_dock-t1.jpg"]; 
 
var counter = 0; 
 
function start() { 
 
    counter = counter + 1; 
 
    a++; 
 
    if(a>=100 && Handler) 
 
    clearInterval(Handler); 
 
    if(counter == images.length) counter=0; 
 
    var image = document.getElementById("trafficlight"); 
 
    image.src=url+images[counter]; 
 
    return; 
 
} 
 
function infinity() { 
 
    Handler=setInterval(start, 3000); 
 
}
<DOCTYPE html> 
 
<html> 
 
    <body onload="infinity()"> 
 
     <p></p> 
 
     <h1>Traffic Light Sequence</h1> 
 
     <img id ="trafficlight" src="http://www.hdwallpapers.in/thumbs/2017/yosemite_national_park_winter_4k-t1.jpg"> 
 
     <script> 
 
      
 
     </script> 
 
    </body> 
 
</html>

0

Я знаю, что этот вопрос уже есть ответ, но я просто понял, что следующий код может быть лучше, и относительно простым способом сделать это ,

<DOCTYPE html> 
<html> 
    <body onload="infinity()"> 
     <p></p> 
     <h1>Traffic Light Sequence</h1> 
     <img id ="trafficlight" src="r.jpg"> 
     <script> 
      var images = [ 
       "red.JPG", 
       "green.jpg", 
       "randy.jpg", 
       "yellow.JPG" 
      ]; 
      function infinity() { 
       var counter = 0, 
        image = document.getElementById("trafficlight"), 
        a = 5, 
        timeoutInterval = 3000; 
       setInterval(function() { 
       counter++; 
       if(counter == images.length) counter=0; 
       if (a>=0) { 
        image.src=images[counter]; 
        a--; 
       }else{ 
        // this else case is in the event that the timeout 
        // variable is 1, which is essentially 1ms, which 
        // is bad as it would make your cpu usage go to a 
        // 100% 
        if (timeoutInterval <= Number.MAX_SAFE_INTEGER - 2) { 
         // the above if condition is to stop timeoutInterval 
         // from ever reaching 2^53 which would cause an 
         // overflow 
         timeoutInterval *= 2; 
         Math.pow(timeoutInterval, 20); 
        } 
       } 
       }, timeoutInterval); 
      } 
     </script> 
    </body> 
</html> 

Спасибо!

P.S. мой ноутбук все еще горячий от запуска вашего бесконечного кода цикла примера

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