Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Смена цвета div (https://javascript.ru/forum/misc/51697-smena-cveta-div.html)

Octane 17.11.2014 15:49

просроченные интервалы могут выполняться друг за другом без задержки, поэтому чаще всего используют таймауты

krutoy 17.11.2014 16:55

Octane,
Че то не верится. Какая разница? Можещь написать тестовый пример, простенький?

Octane 17.11.2014 17:05

это старая избитая тема, в интернете полно статей
Цитата:

Сообщение от John Resig
If a timer is blocked from immediately executing it will be delayed until the next possible point of execution (which will be longer than the desired delay).
Intervals may execute back-to-back with no delay if they take long enough to execute (longer than the specified delay).

http://ejohn.org/blog/how-javascript-timers-work/
перевод: http://habrahabr.ru/post/138062/

ну и еще до кучи
http://alljs.ru/articles/timeout/setinterval

krutoy 17.11.2014 18:51

Octane,
Почему же тогда тут setInterval не перекрывает setTimeout?
st=function(){return setTimeout(function(){console.log("setTimeout"); timeoutId=st()}, 3)}
si=function(){return setInterval(function(){console.log("setInterval")}, 3)}


stop=function(){setTimeout(function() {clearTimeout(timeoutId); clearInterval(intervalId)}, 3000)}
     
stop()
timeoutId=st()
intervalId=si()
i=100000000
console.time("cycle")
while(i--){}
console.timeEnd("cycle")

//     cycle: 1796ms
//     setTimeout
//     setInterval
//     setTimeout
//     setInterval
//     setTimeout
//     setInterval
//     ...

Octane 17.11.2014 20:12

мне лень писать test case)

Resig говорит про время исполнения колбека, наверное как-то так http://habrahabr.ru/post/138062/#comment_4604133 пример будет выглядеть

danik.js 17.11.2014 23:21

Цитата:

Сообщение от krutoy
однако это не повод писать через жопу.

Да оба варианта через жопу))
В идеале тут нужно использовать requestAnimationFrame. К слову, схема его использования схожа именно с setTimeout.

danik.js 17.11.2014 23:39

Цитата:

Сообщение от рони
почему не работает в хроме

В хроме не отрабатывает такой селектор внутри ноды пока не завершится парсинг ноды. А скрипт, как известно, приостанавливает процесс парсинга.
Вообще, выглядит как баг. Видимо, побочный эффект от оптимизаций.

danik.js 17.11.2014 23:51

function randomRGBColor() {
    return Math.round(Math.random() * 0xFFFFFF).toString(16);
}


Вот такой вот HEX вариант )

рони 17.11.2014 23:53

Цитата:

Сообщение от danik.js
Вот такой вот HEX вариант )

не катит

рони 17.11.2014 23:55

Цитата:

Сообщение от danik.js
В хроме не отрабатывает такой селектор внутри ноды пока не завершится парсинг ноды

ок добавил window.onload таймер стал ненужен, вот тебе и ставьте скрипт в конце body


Часовой пояс GMT +3, время: 16:30.