Еще один вопрос по setTimeout setInterval
Какое действие выполняется когда эти методы добалены внутрь функции и выполняют отсрочку или повторение этой же функции. Например,создал функцию,работает правильно но не пойму как происходит SetTimeout(И еще был бы благодарен если бы обэъяснили что будет происходить если добавить вместо setTimeout - setInterval
<html> <head> <script> var n=0; function move() { if(n<45) { n++; document.getElementById('div1').style.left=index() ; } setTimeout(move,1); } function index() { return n + "%"; } </script> </head> <body onLoad='move()'> <div id="div1" style="position:absolute;width:120px;height:120px; background:red;top:0%;">Div </div> </body> </html> |
var n=0; function move() { if(n<45) { n++; //увеличиваем n на 1 document.getElementById('div1').style.left=index() ; //приравниваем .left значению, которое возвращает нам index() } setTimeout(move,1); //через 1 тысячную секунды запускаем move(), только уже с большим n } function index() { return n + "%"; } Что могу сказать, рекурсия никогда не закончится, потому что в условие n<45 не внесено setTimeout(move,1); Если делать через setInterval, то рекурсия не нужна. На вскидку так: var n = 0; var interval; function index() { return n + "%"; } function move() { n++; //увеличиваем n на 1 document.getElementById('div1').style.left=index() ; //приравниваем .left значению, которое возвращает нам index() if (n>=45) clearInterval(interval); //если n>=45 отключаем setInterval } interval = setInterval(move, 1); //Ставим запуск move() каждую тысячную секунды Не проверял. |
А что плохого в том ч рекурсия будет бесконечной?
|
Цитата:
Да и в принципе, зачем она, если она ничего не делает? Просто внесите setTimout в скобки под условие if. |
Цитата:
|
>Просто внесите setTimout в скобки под условие if.
Это нужно сделать обязательно. Как показали испытания, IE7, Opera, Firefox (самый последний на данный момент) виснут и выдают ошибку. Пришел сюда из поисковиков, не вчитывался, скопировал код сверху, а потом убил час на то, чтобы понять почему не работает нигде больше кроме Хрома и Сафари (у них движок на яве написан). |
Часовой пояс GMT +3, время: 11:38. |