10.12.2015, 22:05
|
Аспирант
|
|
Регистрация: 03.12.2014
Сообщений: 58
|
|
Ускоряется setInterval
Здравствуйте!
Есть функция которая меняет изображения (setInterval 1). Смена изображений происходит через определенное время (setInterval 2).
Работает! Но не корректно.
Если вкладка страницы открыта, но не активна скорость смены изображений начинает ускоряться в бесконечность.
Может кто-то сможет сказать почему так и это как это исправить?
var images = ['img/1.png', 'img/2.png', 'img/3.png', 'img/4.png', 'img/5.png'],
length = images.length,
index = 1;
function animate() {
id=setInterval (function()
{
if(index == length) index = 0;
document.getElementById('img').src = images[index++];
if(index == 5) clearInterval(id); // если достигнуто последнее изображение, то очищать setInterval
}, 65) // интервал смены изображений (setInterval 1)
}
setInterval(animate, 4500) // интервал между сменами изображений (setInterval 2)
|
|
10.12.2015, 22:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Tord002,
попробуйте никогда не использовать setInterval в своих скриптах ... или хотябы научитесть обнулять предыдущий прежде чем запустить новый
|
|
10.12.2015, 22:51
|
Аспирант
|
|
Регистрация: 03.12.2014
Сообщений: 58
|
|
Пробую обнулить. Итог тот же
var images = ['img/1.png', 'img/2.png', 'img/3.png', 'img/4.png', 'img/5.png'],
length = images.length,
index = 1;
function animate() {
id1=setInterval (function()
{
if(index == length) index = 0;
document.getElementById('img').src = images[index++];
if(index == 5) clearInterval(id1);
}, 65) // интервал смены изображений (setInterval 1)
clearInterval(id2);
animate2();
}
function animate2() {
id2=setInterval(animate, 4500)
}
animate2();
Последний раз редактировалось Tord002, 10.12.2015 в 22:54.
|
|
10.12.2015, 23:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Tord002,
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
10.12.2015, 23:14
|
Аспирант
|
|
Регистрация: 03.12.2014
Сообщений: 58
|
|
Простите! Вот:
var images = ['img/1.png', 'img/2.png', 'img/3.png', 'img/4.png', 'img/5.png'],
length = images.length,
index = 1;
function animate() {
id1=setInterval (function()
{
if(index == length) index = 0;
document.getElementById('img').src = images[index++];
if(index == 5) clearInterval(id1);
}, 65) // интервал смены изображений (setInterval 1)
clearInterval(id2);
animate2();
}
function animate2() {
id2=setInterval(animate, 4500)
}
animate2();
|
|
10.12.2015, 23:17
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Tord002,
и что хотите получить зачем два интервала?
|
|
10.12.2015, 23:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Tord002,
может вы так хотели?
var images = ['img/1.png', 'img/2.png', 'img/3.png', 'img/4.png', 'img/5.png'],
length = images.length,
index = 1;
function animate() {
document.getElementById('img').src = images[index];
index = ++index % length
}
setInterval(animate, 4500)
|
|
11.12.2015, 00:01
|
Аспирант
|
|
Регистрация: 03.12.2014
Сообщений: 58
|
|
Немного не так. В этом и проблема.
Нужно чтобы изображения менялись один цикл с интервалом, например 65
После это пауза - 4500. И цикл запускается снова.
|
|
11.12.2015, 00:04
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
Tord002, setTimeout тогда лучше.
|
|
11.12.2015, 00:07
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Tord002,
var images = ['img/1.png', 'img/2.png', 'img/3.png', 'img/4.png', 'img/5.png'],
length = images.length,
index = 0;
(function animate() {
document.getElementById('img').src = images[index];
index = ++index % length
window.setTimeout(animate,index ? 65 : 4500)
}())
|
|
|
|