Повторяю ответ: пауза в цикле не нужна.
Вызов чего-либо по временному интервалу в JavaScript осуществляется с помощью интервалов и таймеров(setInterval, setTimeout). Циклы в этом вообще не участвуют. Читайте статьи по ссылкам в этой теме до полного понимания. var i = 3; //кол-во повторений; var interval = setInterval( //задаём интервал function(){ //анонимная функция обёртка, вместо неё можно передавать функции по имени soundManager.play('mySound2'); //исполняем нужный вам код if(--i <= 0) clearInterval( interval ); //если закончилось заданное кол-во повторений - сбрасываем интервал }, 3 * 1000 //время повтора в мс ) |
Приветствую. Ребят, я опять за помощью. :)
function Zazor($) { if($==1) clearTimeout(zazor); else var zazor = setTimeout("alert('Приехали')", 4000); } <span onclick="Zazor()">Зеленый</span><br> <input type="button" value="Останов" onclick="Zazor(1)" /> При клике на "Зеленый" запускается таймер, при клике на "Останов" таймер не выключается. Как это поправить? |
Вы используете локальную переменную zazor, и естественно, что при каждом выполнении функции она не равна своему предыдущему значению
Используйте либо глобальную переменную, либо используйте замыкание |
function Zazor($)
{ if($==1) clearTimeout(zazor); else var zazor = function(){ setTimeout("alert('Приехали')"}, 4000); } так что ли... не работает. И странно,что нельзя без всяких условий этосделать и останавливать кнопкой (clearTimeout(zazor)), потому что alert срабатывает сразу же,не дожидаясь 4 сек. |
Цитата:
Вы написали синтаксически неверный код, который заведомо не будет выполнятся Перечитайте еще раз мой ответ Если замыкания для вас слишком сложны, то используйте более простой вариант, описанный мною до слова "либо" |
JSBeginner,
то что вы хотите в цикле сделать НЕЛЬЗЯ итерация цикла проходит за сотые доли секунды и то что вы ставите на setTimeout будет выполнятся в одно и тоже время |
function Zazor($) { if($==1) clearTimeout(zazor); else var zazor = function(){// вы создали локальную переменную которую уже нельзя будет остановить вызовом другой функции (другой контекст) setTimeout("alert('Приехали')"}, 4000); } как вам Gvozd уже сказал используются разные переменные, надо так <script> var zazor = null;//глобальная переменная которую можно использовать везде function Zazor($) { if($==1) clearTimeout(zazor); else zazor = setTimeout("alert('Приехали')", 4000); } </script> <span onclick="Zazor()">Зеленый</span><br> <input type="button" value="Останов" onclick="Zazor(1)" /> |
Спасибо за пояснения,теперь все работает.
Далее вот это... var ovec =0; var zazor; // Игровые функции function ivolga(so,put) { if(so!=0) { clearTimeout(zazor); ovec++; if(so != cvet[ovec]){ //проверка совпадения цветов soundManager.play('mySound5'); return; }else if(ovec==cvet.length){ //проверка окончания серии alert('Победа!'); return; } soundManager.play('mySound' + so); return } } // формирование цветов var cvet = []; function Start() { cvet.length=0; ovec=0; for(var i=0;i<2;i++){ // генерируем цвета cvet.push(getrandom(1,4)); } } <span onclick="Start()">Пуск</span> <br> <span onclick="ivolga(1)">Желтый</span><br> Вот вроде все правильно, но почему-то всегда идет ошибка совпадения цветов и "победа" тоже не наступает.. :) |
Тут уже разобрался. В функции Start() переменной ovec нужно -1 присваивать, и далее эту же переменную правильно сопоставлять.
|
Часовой пояс GMT +3, время: 06:24. |