динамическйи таймер в 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 - а это как мне кажется значит что таймер даже не установился в самом начале так ведь ??? тонкости джаваскрипта к сожалению пока не освоил, буду очень признателен за какие - нибудь ссылки где будет какой нибудь пример похожий на этот, или если вам приходилось такое вытворять покажите как , спасибо |
Функции нельзя объявлять в цикле.
|
Ты в цикле хочешь запустить несколько таймеров. Но ты не сохраняешь их идентификаторы (сохраняешь только последний). Как ты их собрался останавливать без id?
|
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 на одну секунду позже - не удалось - какие то магические алерты происходят если запустить этот код =) |
С чего ты взял что id, выдаваемый при вызове функции setInterval будет меньше определенной величины (end/t допустим) ? Браузер может хоть миллион выдать. Это id, его бесполезно сравнивать, бесполезно инкрементировать.
|
danik.js
почему бесполезно сравнивать и инкрементировать??? id это же переменная в которой МЫ решаем что будет хранится так ведь?? если да, то её можно изменять и делать всё что угодно, в частности назначить каждому выполнению setInterval свой конкретный id в цикле, тем самым зациклить выполнение |
Можешь записывать в нее угодно. Но чтобы убить таймер, тебе нужно в clearInterval() передать именно id, который вернула функция setInterval. Передашь чета другое (допустим id++) - и тогда либо ты убъешь другой таймер либо ничего не произойдет вовсе.
|
danik.js,
так я же сначала убиваю таймер а потом только инкрементирую id, while (i < end/t) { alert("setting up new timer"); clearInterval(i); i++; } |
danik.js,
Тоесть я сначала убиваю именно тот таймер который был передан в setInterval после увеличиваю id и делаю тоже самое и т.д. |
Повторяю вопрос. С чего ты взял что id меньше определенного числа, допустим end/t ?
|
Часовой пояс GMT +3, время: 20:02. |