Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   координаты загружаемого клипа в Opera (http://www.flasher.ru/forum/showthread.php?t=92995)

Yukagir 11.03.2007 17:08

координаты загружаемого клипа в Opera
 
Добрый день.
Есть сайт http://www.yukagir.ru/cmspictures/
И есть проблема, которую пока не могу решить.
Если не сложно, посмотрите, пожалуйста, раздел "About", используя Opera. При нажатии на картинку открывается окно заданного размера с прелоудером. После загрузки окно должно менять размер и координаты в зависимости от размеров загруженной картинки. В IE, Netscape, Firefox все работает хорошо. В Opera есть две проблемы: во-первых, картинка загружается очень долго (долгое по времени определение, видимо, пути до картинки, сама загрузка, если верить прелоудеру, происходит нормально), во вторых, вторая часть кода после загрузки картинки не срабатывает и окно не меняет своих координат. После того, как картинка попадает в кэш, все хорошо.

Нормальную работу раздела для сравнения можно помотреть в IE.

Вот код, который находится в первом кадре окна:

Код:

stop();
empty._alpha = 0;
empty.loadMovie(_parent.conteiner.temp_win, 1);
preloader._alpha=50;
cl_but_min = 25; // ограничение кнопки close по иксу справа
close_but._x = win_head._x + win_head._width - cl_but_min;
win_head._x = empty._x;
win_head._width = empty._width;
win_head._y = empty._y - win_head._height;

preloader.onEnterFrame = function(){
        var tot:Number = empty.getBytesTotal()/1000;
        var lod:Number = empty.getBytesLoaded()/1000;
        preloader.kb = int(tot)+"kb / "+int(lod)+"kb";
        preloader.proc = int(lod/tot*100)+"%";
        preloader.gotoAndStop(int(lod/tot*100));
        if((lod*tot>0)&&(lod>=tot)){
                gotoAndStop(2);

                win_frame._width = empty._width;
                win_frame._height = empty._height;
                win_head._width = empty._width;
                close_but._x = win_head._x + win_head._width - cl_but_min;
               
                _parent.new_win._x = 400 - _parent.new_win._width/2;
                _parent.new_win._y = 300 - _parent.new_win._height/2;
               
                empty._alpha = 100;
                unloadMovie(preloader);
        }
}

close_but.onRelease = function(){
        _parent.conteiner.buts_on();
        unloadMovie(_parent.new_win);
}
win_head.onPress = function(){
        _parent.new_win.startDrag(false);
}
win_head.onRelease = function(){
        stopDrag();
}

заранее спасибо.

etc 11.03.2007 17:20

Браузерных зависимостей почти не бывает. Вот зависимость от версии плеера да. Для начала убедись, что плееры во всех браузерах одной версии.

Yukagir 11.03.2007 17:38

последние версии стоят. специально сначала снес все, а потом заново с adob поставил.

etc 11.03.2007 17:59

Выведи алертом после загрузки размеры картинки. Я бы на твоем месте использовал бы MovieClipLoader.

Yukagir 11.03.2007 18:10

я попробую, спасибо. а есть принципиальная разница? кодом написаным вручную работа лоадера не повторяется?

etc 11.03.2007 18:16

Нет, у MovieClipLoader четкое отслеживание момента загрузки.
Ещё меня смущает gotoAndStop(2); сразу после загрузки. Что и куда стопится?

Yukagir 11.03.2007 18:25

ну, фактически, это не обязательно было. на втором кадре бэкграунда нет. поленился из него клип делать и сделал переход на след. кадр с пустым слоем.
можно я дам исходник посмотреть?

etc 11.03.2007 19:39

Ну покажите.

Yukagir 11.03.2007 21:15

вот исходник. картинок. естественно, нет. окно подгружается скриптом, т.е. оно не в сцене, а в библиотеке. в папке _win, называется "win".

спасибо большое.

etc 11.03.2007 21:35

В loadMovie второй параметр строковый, а не числовой.

Код:

stop();
empty._alpha = 0;
preloader._alpha = 50;
cl_but_min = 25;
// ограничение кнопки close по иксу справа
close_but._x = win_head._x+win_head._width-cl_but_min;
win_head._x = empty._x;
win_head._width = empty._width;
win_head._y = empty._y-win_head._height;
onLoadInit = function () {
        win_frame._width = empty._width;
        win_frame._height = empty._height;
        win_head._width = empty._width;
        close_but._x = win_head._x+win_head._width-cl_but_min;
        _parent.new_win._x = 400-_parent.new_win._width/2;
        _parent.new_win._y = 300-_parent.new_win._height/2;
        empty._alpha = 100;
        delete preloader.onEnterFrame;
        unloadMovie(preloader);
};
mcl = new MovieClipLoader();
mcl.addListener(this);
mcl.loadClip(_parent.conteiner.temp_win, empty);
preloader.onEnterFrame = function() {
        var tot:Number = empty.getBytesTotal()/1000;
        var lod:Number = empty.getBytesLoaded()/1000;
        preloader.kb = int(tot)+"kb / "+int(lod)+"kb";
        preloader.proc = int(lod/tot*100)+"%";
        preloader.gotoAndStop(int(lod/tot*100));
};
close_but.onRelease = function() {
        _parent.conteiner.buts_on();
        unloadMovie(_parent.new_win);
};
win_head.onPress = function() {
        _parent.new_win.startDrag(false);
};
win_head.onRelease = function() {
        stopDrag();
};

Должно заработать (тестить локально это невозможно).

Yukagir 11.03.2007 21:56

спасибо большое! сейчас попробую

Yukagir 11.03.2007 23:16

спасибо большущее!!! и в Opera заработало, наконец-то -)) с меня коньяк!
можно вопрос по Вашему коду? В функции написано
Код:

delete preloader.onEnterFrame;
unloadMovie(preloader);

разве недостаточно второй строки?

etc 12.03.2007 01:00

В принципе достаточно, но там лучше removeMovieClip. Т.е. сначала удаляем подписку на событие, потом сам клип. Но, в принципе, это для порядку и чтобы наверняка.

з.Ы. Коньяк не пью.

Yukagir 12.03.2007 01:17

понял.
еще раз спасибо за помощь.


Часовой пояс GMT +4, время: 17:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.