Просмотр полной версии : Подгрузка картинок. Отображается только после рефреш.
Сражу скажу - я не профи, поэтому могут быть тупые ошибки.
Наваял я полоску для просмотра превьюшек (кликнул - в другом фрейме открылось)
Вобщем, сабж.
Разумеется, когда так смотриш - проблем нет.
А вот когда с сервера - только после обновления.
Кто подскажет что за несправедливость?
Ещё не пойму почему при старте центр не правильно находит...
Господа, ну неужели вы так и позволите человеку погибнуть. Неужто никто не подскажет???
не проверял, но возможно ошибочно условие прекращения ожидания загрузки по последней картинке( а вдруг предыдущие еще не пришли)
можно так попробовать
onEnterFrame = function() {
var allget=true;
for (i=0; i<photos_array.length; i++)
{
var l = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesLoaded();
var t = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesTotal();
trace(l+" "+t);
if (l && t && l>=t) {
_root.main_movie.buttons["foto_" + photos_array[i]]._x = nnn_pos;
_root.main_movie.buttons["link_" + photos_array[i]]._x = nnn_pos;
nnn_pos = nnn_pos + _root.main_movie.buttons["foto_" + photos_array[i]]._width + space_pos;
}else allget=false;
if(allget)
{
_global.pos = 0 - (_root.main_movie.buttons._width / 2);
_root._visible = true;
_root.main_movie.play(3);
delete _root.onEnterFrame;
}
}
};
пардон, вот так ведь имелось ввиду
onEnterFrame = function() {
var allget=true;
for (i=0; i<photos_array.length; i++)
{
var l = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesLoaded();
var t = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesTotal();
trace(l+" "+t);
if (l && t && l>=t) {
_root.main_movie.buttons["foto_" + photos_array[i]]._x = nnn_pos;
_root.main_movie.buttons["link_" + photos_array[i]]._x = nnn_pos;
nnn_pos = nnn_pos + _root.main_movie.buttons["foto_" + photos_array[i]]._width + space_pos;
}else allget=false;
}
if(allget)
{
_global.pos = 0 - (_root.main_movie.buttons._width / 2);
_root._visible = true;
_root.main_movie.play(3);
delete _root.onEnterFrame;
}
};
//предусмотрено под размер фоток 80x60
_global.photos_array = new Array();
loadVariables("photos_list.php", "_root", "GET");
_global.space_pos = 50; // расстояние между фотками
_global.photo_center = 30; // высота_фотки/2 - центровка
_global.photo_border_color = "0xA8BB52"; //цвет бордюра фоток
onData = function()
{
if (files != null)
{
_global.photos_folder = folder;
_global.photos_array = files.split(",");
_root.main_movie.gotoAndPlay(2);
/**********onEnterFrame*************/
_root.onEnterFrame=function(){
var allget=true;
for (i=0; i<photos_array.length; i++)
if (_root.main_movie.buttons["foto_" + photos_array[i]]._width==0) allget=false;
if(allget)
{
var nnn_pos=0;
for(i=0; i<photos_array.length; i++){
_root.main_movie.buttons["foto_" + photos_array[i]]._x = nnn_pos;
_root.main_movie.buttons["link_" + photos_array[i]]._x = nnn_pos;
_root.main_movie.buttons["foto_" +photos_array[i]]._y = 0 - photo_center; // это перетаскиваем и второго фрейма main_movie
nnn_pos = nnn_pos + _root.main_movie.buttons["foto_" + photos_array[i]]._width + space_pos;
}
_global.pos = 0 - (_root.main_movie.buttons._width / 2);
_root._visible = true;
_root.main_movie.buttons.onEnterFrame = function() { // и это тоже переехало из main_movie
if(_root.main_movie.buttons._alpha<100) {_root.main_movie.buttons._alpha += 1;} //от последнего числа зависит скорость возрастания альфы при старте (мин 0.5)
else _root.main_movie.gotoAndPlay(3);
}
delete _root.onEnterFrame;
}
}
/**********onEnterFrame*************/
}
}
Ещё не пойму почему при старте центр не правильно находит... даже когда картинка загружена _width и _height не сразу выдают правильный размер картинки, поэтому проверку ззагрузки я заменил на _root.main_movie.buttons["foto_" + photos_array[i]]._width==0
Nox Noctis
25.04.2004, 00:11
я не тестил код. предупреждаю :)
то что вижу сразу:
плохо 1:
onData для рута срабатывает как минимум один раз по-любому. у тебя она срабатывает два раза. угадай почему :)
плохо 2:
нельзя называть файл, в котором всего лишь хранятся переменные расширением .php: в твоем случае это еще недограбли, но вообще, ты не сможешь определить getBytesTotal у файла, если у него исполняемое расширение, даже если хранятся в нём всего лишь текстовые переменные
хехех... где-то я уже это (l && t && l>=t) видел :))
только с тех пор всё несколько извменилось.
стоит обновить концепцию.
в семёрке появилась одна замечательная особенность (даже если публиковать под шестёрку) - при загрузке файлов размер getBytesTotal ИНОГДА бывает равно -1 до того как началась загрузка. в шестёрке -1 возвращалось исключительно тогда, когда файл не найден.
так что конструкция l && t в семёрке будет работать как бог на душу положит (потому как отрицательные числа тоже преобразуются в true)
и еще одна особенность - начальный размер файла может быть не равен нулю. если вы не анлоадите клип перед тем как грузить в него что-то новое, или если вы создали контейнер для загрузки вручную (помним, что пустой клип созданный не-программно имеет размер 4 байта, а не ноль, как хочется думать.)
итого:
— либо строго анлоадить клип перед тем как вызывать лоад,
— либо создавать контейнер для загрузки программно, и проверять (l>0 && t>0 && l>=t)
— либо просто проверять (l>4 && t>4 && l>=t), где 4 - это размер пустого клипа созданного не-программно.
вот такие мелочи создают ОХРЕНИТЕЛЬНЫЕ баги. сам видел. :))
Спасибо ОГРОМНОЕ всем кто откликнулся!
Всё отлично заработало!
А по поводу PHP - вобщето на самом деле у меня он генерирует эти переменные...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.