Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 22.09.2012, 03:51
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Повторяю ответ: пауза в цикле не нужна.

Вызов чего-либо по временному интервалу в JavaScript осуществляется с помощью интервалов и таймеров(setInterval, setTimeout). Циклы в этом вообще не участвуют.

Читайте статьи по ссылкам в этой теме до полного понимания.

var i = 3; //кол-во повторений;
var interval = setInterval( //задаём интервал
	function(){ //анонимная функция обёртка, вместо неё можно передавать функции по имени
		soundManager.play('mySound2'); //исполняем нужный вам код
		if(--i <= 0) clearInterval( interval ); //если закончилось заданное кол-во повторений - сбрасываем интервал 
	},
	3 * 1000 //время повтора в мс 
)
__________________
29375, 35

Последний раз редактировалось Aetae, 22.09.2012 в 04:15.
Ответить с цитированием
  #22 (permalink)  
Старый 23.09.2012, 12:56
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Приветствую. Ребят, я опять за помощью.
function Zazor($)
{
if($==1) clearTimeout(zazor);
else var zazor = setTimeout("alert('Приехали')", 4000);
}

<span onclick="Zazor()">Зеленый</span><br>
<input type="button" value="Останов" onclick="Zazor(1)" />

При клике на "Зеленый" запускается таймер,
при клике на "Останов" таймер не выключается.
Как это поправить?
Ответить с цитированием
  #23 (permalink)  
Старый 23.09.2012, 13:32
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Вы используете локальную переменную zazor, и естественно, что при каждом выполнении функции она не равна своему предыдущему значению
Используйте либо глобальную переменную, либо используйте замыкание
Ответить с цитированием
  #24 (permalink)  
Старый 23.09.2012, 15:19
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

function Zazor($)
{
if($==1) clearTimeout(zazor);
else var zazor = function(){
setTimeout("alert('Приехали')"}, 4000);
}

так что ли...
не работает.
И странно,что нельзя без всяких условий этосделать и останавливать кнопкой (clearTimeout(zazor)), потому что alert срабатывает сразу же,не дожидаясь 4 сек.
Ответить с цитированием
  #25 (permalink)  
Старый 23.09.2012, 18:03
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от sotik
так что ли...
не работает.
Нет разумеется.
Вы написали синтаксически неверный код, который заведомо не будет выполнятся
Перечитайте еще раз мой ответ
Если замыкания для вас слишком сложны, то используйте более простой вариант, описанный мною до слова "либо"
Ответить с цитированием
  #26 (permalink)  
Старый 23.09.2012, 20:05
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

JSBeginner,
то что вы хотите в цикле сделать НЕЛЬЗЯ итерация цикла проходит за сотые доли секунды и то что вы ставите на setTimeout будет выполнятся в одно и тоже время
Ответить с цитированием
  #27 (permalink)  
Старый 23.09.2012, 20:12
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

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)" />
Ответить с цитированием
  #28 (permalink)  
Старый 24.09.2012, 06:25
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Спасибо за пояснения,теперь все работает.
Далее вот это...
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>

Вот вроде все правильно, но почему-то всегда идет ошибка совпадения цветов и "победа" тоже не наступает..
Ответить с цитированием
  #29 (permalink)  
Старый 24.09.2012, 13:49
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Тут уже разобрался. В функции Start() переменной ovec нужно -1 присваивать, и далее эту же переменную правильно сопоставлять.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как при помощи JS hta в трею свернуть kimboo Общие вопросы Javascript 4 11.07.2008 16:00
Как защитить файл js от скачивания с сервера? slon Общие вопросы Javascript 2 02.07.2008 01:14
Обращение к элементам js, как в xsl GOll Общие вопросы Javascript 1 27.06.2008 14:47
Как передавать переданные в js файлы параметры? Mattias Общие вопросы Javascript 4 26.06.2008 16:58
Как с помощью JS "на-лету" менять часть HTML кода greendoc Общие вопросы Javascript 2 18.03.2008 20:43