Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.07.2013, 23:55
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

динамическйи таймер в setInterval ?
Здравстуйте господа, меня мучает вопрос: почему нельзя динамически менять таймер в функции setInterval ??? это же переменная по сути, если рассуждать логически то эту переменную в цикле можно изменять, и тогда наш setInterval будет выполнять функцию с динамически меняющимся таймером, тоесть такой код должен алертить каждый раз на одну секунду позже чем в предыдущий раз:
var end = 5000;
				for (var t = 1000; t <= end; t+=1000) {		
				var id = setInterval(test, t);
					function test () {
						var testDiv = document.getElementById("testDiv");
						alert(testDiv.firstChild.nodeValue + t);
						if (t == end) clearInterval(id);
					}
				}

<div id = "testDiv">test</div>

но это теоретически, запустив в консоли, выдаелась ошибка - test is not defined - а это как мне кажется значит что таймер даже не установился в самом начале так ведь ??? тонкости джаваскрипта к сожалению пока не освоил, буду очень признателен за какие - нибудь ссылки где будет какой нибудь пример похожий на этот, или если вам приходилось такое вытворять покажите как , спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2013, 03:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Функции нельзя объявлять в цикле.
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2013, 03:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ты в цикле хочешь запустить несколько таймеров. Но ты не сохраняешь их идентификаторы (сохраняешь только последний). Как ты их собрался останавливать без id?
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2013, 16:33
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

danik.js,
что скажешь по поводу такого
var end = 5000;			
			var i = 1;
			for (var t = 1000; t <= end; t += 1000) {				
				i = setInterval(function test() { alert("test" + t); }, t);	
				while (i < end/t) {
					alert("setting up new timer");
					clearInterval(i);
					i++;					
				}					
			}

здесь по идеи во внутреннем цикле while каждый i - ый setInterval должен останавливаться, но происходит тупо выброс из главного цикла for с таймером 6000 (6 секунд) офигеть ! таймер всё таки получлось сбросить но вот зациклить каждое следующее выполнение фукнции test на одну секунду позже - не удалось - какие то магические алерты происходят если запустить этот код =)
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2013, 16:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

С чего ты взял что id, выдаваемый при вызове функции setInterval будет меньше определенной величины (end/t допустим) ? Браузер может хоть миллион выдать. Это id, его бесполезно сравнивать, бесполезно инкрементировать.
Ответить с цитированием
  #6 (permalink)  
Старый 23.07.2013, 17:32
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

danik.js
почему бесполезно сравнивать и инкрементировать??? id это же переменная в которой МЫ решаем что будет хранится так ведь?? если да, то её можно изменять и делать всё что угодно, в частности назначить каждому выполнению setInterval свой конкретный id в цикле, тем самым зациклить выполнение
Ответить с цитированием
  #7 (permalink)  
Старый 23.07.2013, 18:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Можешь записывать в нее угодно. Но чтобы убить таймер, тебе нужно в clearInterval() передать именно id, который вернула функция setInterval. Передашь чета другое (допустим id++) - и тогда либо ты убъешь другой таймер либо ничего не произойдет вовсе.
Ответить с цитированием
  #8 (permalink)  
Старый 23.07.2013, 18:35
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

danik.js,
так я же сначала убиваю таймер а потом только инкрементирую id,
while (i < end/t) {
                    alert("setting up new timer");
                    clearInterval(i);
                    i++;                   
                }
Ответить с цитированием
  #9 (permalink)  
Старый 23.07.2013, 18:43
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

danik.js,
Тоесть я сначала убиваю именно тот таймер который был передан в setInterval после увеличиваю id и делаю тоже самое и т.д.
Ответить с цитированием
  #10 (permalink)  
Старый 24.07.2013, 00:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Повторяю вопрос. С чего ты взял что id меньше определенного числа, допустим end/t ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Остановить таймер setInterval Орёл Общие вопросы Javascript 8 11.01.2015 22:07
таймер обратного отсчета (Setinterval и ClearInterval) Vampir3 Общие вопросы Javascript 1 11.08.2012 19:27
setInterval и глобальные переменные Почемучкин Events/DOM/Window 11 11.08.2012 14:44
Как сделать таймер как в САР? jelome Элементы интерфейса 0 27.06.2011 12:40
Таймер для слайдера (jQuery) RamPi Events/DOM/Window 0 23.05.2011 14:52