Изменение размера флеш-объекта из браузера без мерцания - PullRequest
0 голосов
/ 10 июля 2011

Мне было интересно, как добиться собственного эффекта полосы прокрутки, который TheFWA (thefwa.com) сумел сделать довольно хорошо (я не фанат Flex scrollbars).

Я нашел этот пост (/384442/kak-ya-mogu-sozdat-prilozhenie-flex-s-dinamicheskoi-vysotoi), и реализовал технику, так как я вызываю функцию JS через ExternalInterface каждый раз, когда объект флэш-памяти меняет размер. Эта функция JS просто изменяет размер div, который содержит объект флэш-памяти, который создает собственные столбцы.

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

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

Как я могу решить это? Я знаю, что это технически возможно. ПростоВзгляните на TheFWA и посмотрите, как плавно Flash и браузер взаимодействуют друг с другом, чтобы обеспечить работу собственных полос прокрутки без каких-либо мерцаний или неправильных измерений

Ответы [ 3 ]

1 голос
/ 10 июля 2011

Флэш-контент на этом сайте имеет фиксированный размер. Что они сделали, так это поместили файл swf в центрированный div. Примерно так:

...header stuff...
<body>
    <div id="flashContent" style="width:960px; margin:0 auto;">
        ...the flash content goes here...
    </div>
</body>

Ширина контейнера div должна соответствовать ширине вашего flash-ролика.

Если вы хотите изменить размер флэш-ролика, взгляните на swffit

1 голос
/ 23 августа 2011

Эта проблема возникла со времен Flash Player 10 и до сих пор встречается вплоть до бета-версии FP 11.

При изменении размера DIV, содержащего SWF, размер самого SWF изменяется, поэтому вы «просите» игрока перерисовать содержимое. Но дело в том, что эта перерисовка создает этот мерзкий мерцание.

Обходной путь - это вообще не изменять размер SWIV DIV и изменять размер другого пустого DIV, поэтому вы заставляете браузер обновлять полосу прокрутки.

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

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

Вы можете проверить это здесь http://www.andrefelipe.com/

А исходный код у меня в фреймворке https://github.com/andrefelipe/fabricaframework/blob/master/src/fabrica/external/Browser.as

0 голосов
/ 10 июля 2011

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

Я что-то упустил?

...