Форум 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)
-   -   В ИЕ после обновления страницы картинки в полосе прокрутки позиционируются неправильн (http://www.flasher.ru/forum/showthread.php?t=130368)

djyamato 25.09.2009 17:31

при первой загрузке ИЕ считает что Stage.height=97 а при второй из кэша считает что Stage.height=0 - бред какой-то :)

Пришлось вводить переменную в код вставки so.addVariable("StageHeight", "97") и относительно ее значения высчитывать местоположение холдера по Y

Код AS1/AS2:

_root.PersonsHolder._y=Number(_root.PersonPic_height)/2+Math.abs(_root.StageHeight-Number(_root.PersonPic_height))/2;


заработало корректно в ИЕ

Спасибо Вам "mooncar" за "перст указующий" :)



P.S. А вот интересно - почему собственно Stage.height у загруженной из кэша ИЕ флэшки равен нулю ?
может просто это свет с луны не туда упал ? ....

mooncar 25.09.2009 18:06

Обычно нулю равны размеры свежесозданных объектов (мувики) сразу после создания.
Когда закачиваем в них содержание извне, любые действия с участием размеров выполняются по готовности. Готовность - это все пишется внутри onLadInit, например.
А вот как быть, когда идет аттач из библиотеки, как определить готовность наполнения для дальнейших вычислений в этом случае , так и не разобрался. проблема моя как раз с этим была связана.
Видимо, тут нужен какой-то слушатель, проверяющие отличность размера от нуля и говорящий - все, можно уже дальше вычислять.

djyamato 25.09.2009 18:32

хм ну хорошо
а к чему же тогда var so = new SWFObject("sqlGet2.swf", "mymovie", "858", "97", "8", "#ffffff") - это же явные размеры ? (но тут глубоко разбираться нужно как работает swfObject для разных брузеров я так думаю)

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

mooncar 25.09.2009 18:43

Попробуйте аттачить в качестве контейнера мувик с размещенным внутри другим, например, прозрачным графическим символом (_alpha = 0).

djyamato 02.10.2009 16:06

Цитата:

Сообщение от mooncar (Сообщение 853567)
...
А вот как быть, когда идет аттач из библиотеки, как определить готовность наполнения для дальнейших вычислений в этом случае , так и не разобрался. проблема моя как раз с этим была связана.
Видимо, тут нужен какой-то слушатель, проверяющие отличность размера от нуля и говорящий - все, можно уже дальше вычислять.

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

Код AS1/AS2:

Object.registerClass("myMC",myMC);
var StartDepth=1;
var NewBTN=_root.attachMovie("myMC","myMC_",StartDepth,{_x:0,_y:0});
 
function myMC():Void {
  myMC.prototype.onLoad = function():Void  {
      var ThisObj=this;
 
      ThisObj.onUnload= function():Void  {
        ....
      }
      ThisObj.onRollOver= function():Void  {
        ....
      }
      ThisObj.onRollOut= function():Void  {
        ....
      }
  }
}


dimarik 03.10.2009 19:04

Код AS1/AS2:

Stage.addListener(this);
 
this.onResize = function():Void {
        Stage.removeListener(this);
        // do layout
};

Да, при мгновенной загрузке (ни одного ProgressEvent'а) размер стейджа может быть неопределенным.
Можно попробовать отложить позиционирование на один или несколько кадров;

Код AS1/AS2:

var delayFrames:Number = 10;
 
this.onEnterFrame = function():Void {
        if (delayFrames-- <= 0){
                delete this.onEnterFrame;
                // do layout
        }
};


djyamato 04.10.2009 00:35

'dimarik', простите, это в тему ТЕМЫ или в ответ господину 'mooncar' ?
Если в тему ТЕМЫ :) то я аттачу мувики определенного размера состоящие из 2х мувиков - холдера и холста (назову их так). После аттача гружу в холст (приаттаченного мувика) картинку и уменьшаю ее программно чтобы она уместилась в холсте. Когда загрузилась картинка - аттачу следующий в мордоленту. У приаттаченного мувика есть высота отличная от нуля (равная высоте холдера плюс расстояние для увеличения при наведении)


Ну а в конечном итоге - к чему тогда SwfObject размеры по ширине и высоте ? только чтобы зарезервировать на странице для себя место ?

То есть лучше не использовать Stage.height если нет на стейдже ничего изначально ?

dimarik 04.10.2009 12:45

Цитата:

Сообщение от djyamato (Сообщение 855355)
То есть лучше не использовать Stage.height если нет на стейдже ничего изначально ?

Лучше дождаться его правильного значения. Что я и предлагал в предыдущем своем посте.

djyamato 04.10.2009 13:29

ясненько - спасибо
Буду иметь это ввиду и учитывать эти факты в последующих разработках.

Всем спасибо.

formyka 23.11.2009 02:09

IE - самый гнусный и тупой браузер современности!!!

Эта проблемма лечиться так в AS3 - в конструкторе Document-класса пишем:

Код AS3:

      // dynamic publishing
      stage.addEventListener(Event.RESIZE, onResize);
      onResize();
 
      function onResize(event:Event = null):void
      {
        if (stage.stageHeight > 0 && stage.stageWidth > 0 && stage.hasEventListener(Event.RESIZE))
        {
          stage.removeEventListener(Event.RESIZE, onResize);
 
          // ваш код
 
        }
      }



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

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