PDA

Просмотр полной версии : SetInterval в цикле ?!


serf
20.07.2005, 12:22
День добрый,

Подскажите пожалуйста решение. Пробывал и так и сяк, ничего не получается.

Есть код, определяет размер загружаемых JPEG-ов:

//for (i=1; i<=kol; i++)
//{
i = 1;
ff = setInterval(get_bytes, 300);
//}

function get_bytes()
{
l=eval("images_" + i).getBytesLoaded();
t=eval("images_" + i).getBytesTotal();

if ((l == t) && (l && t))
{
trace(t);
clearInterval(ff);
}
}

Вот в таком виде работает, но если убрать знаки комментария в цикле FOR, то функция get_bytes() вызывается только 1 раз, таймер не сбрасывается.

Загружается несколько изображений, мне нужно определить отрезок времени когда все изображения будут загружены и потом определю их ширину.

Пробывал использовать вместо SetInterval onEnterFrame, то же что-то не выходит, только если 2 изображения :(

За ранее спасибо

iNils
20.07.2005, 12:43
for (i = 1; i <= 5; i++) {
ff = setInterval (get_bytes, 300, i);
}
function get_bytes (i) {
trace (i)
l = eval ("images_" + i).getBytesLoaded ();
t = eval ("images_" + i).getBytesTotal ();
if ((l == t) && (l && t)) {
trace (t);
clearInterval (ff);
}
}

serf
20.07.2005, 13:54
Спасибо.

В принципе работает :)
Я пошел по другому пути, стал определять размер последней загруженной картинки и потом уже определять размеры всех изображений, но правда этот метод мне кажеться не лчень надежным.


Ваш пример работает, но только clearInterval все равно не сбрасывает таймер, трассировка не прекращается.

Мне что смущает, при трассировке идут значения 1,2,3,4,5,(t байты), и потом опять 1,2,3,4,5,(t байты). Разве не должно быть так: 1, (t байты) clearInterval() по условию, 2, (t байты) clearInterval() по условию и т.д. ? Цикл FOR не прерывается почему то и clearInterval то же. ?!

serf
20.07.2005, 14:01
clearInterval (ff); не работает я так понимаю, потому что не известно значение ff.
Получить не получается, я в AS новичок, а во Флеше тем более.

Я поставил clearInterval (i);
i содержит последовательность 1..5, и индентификатор ff то же 1...5. Не очень конечно подход, а можно передать именно ff ?

iNils
20.07.2005, 14:08
arrayInt = new Array ();
for (i = 1; i <= 5; i++) {
arrayInt[i] = setInterval (get_bytes, 300, i);
}
function get_bytes (i) {
trace (i)
l = eval ("images_" + i).getBytesLoaded ();
t = eval ("images_" + i).getBytesTotal ();
if ((l == t) && (l && t)) {
trace (t);
clearInterval (arrayInt[i]);
}
}
Байты у тебя должны выодится только после того как картинка загрузится, а до этого выводится только индекс объектов.

serf
20.07.2005, 15:31
спасибо за помошь.

serf
20.07.2005, 16:07
не поскажешь с какой лучше стороны подойти к созданию предзагрузчика, с учетом того что не известно сколько изображений будет загружено в флеш фильм?

KUZEN
20.07.2005, 16:10
со стороны универсальности ...

iNils
20.07.2005, 16:27
не поскажешь с какой лучше стороны подойти к созданию предзагрузчика, с учетом того что не известно сколько изображений будет загружено в флеш фильм?
У браузера есть ограничения (в реестре прописывается) на количество одновременно загружаемых элементов. Поэтому лучше всего, грузить одно за другим. То есть после получения события о полной загрузке, начинать грузить следущий элемент.

KUZEN
20.07.2005, 17:02
У браузера есть ограничения (в реестре прописывается) на количество одновременно загружаемых элементов. Поэтому лучше всего, грузить одно за другим. То есть после получения события о полной загрузке, начинать грузить следущий элемент.
Вот про это я и не знал ... спасибо за мастер класс ... а если не секрет какие ограничения ?

serf
20.07.2005, 17:26
спасибо за помощь.

iNils
20.07.2005, 17:27
У IE ограничения в два файла одновременно.
Для изменения этого параметра надо в реестре в ветке
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings добавить binary value с именем MaxConnectionsPer1_0Server и нужныем значением. Особо много ставить не стоит, у меня самого стоит 10 (dec)