Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Динамическая смена атрибута (http://www.flasher.ru/forum/showthread.php?t=140165)

BleSSeD 21.05.2010 22:26

Динамическая смена атрибута
 
Я вставляю флешку на страницу с помощью SWFObject. Вопрос такой: можно ли потом, уже после вставки поменять атрибут wmode. Или хотя бы бекграунд ?

mooncar 22.05.2010 02:40

Меняйте. Можете с помощью JS, например.

BleSSeD 22.05.2010 20:54

А как это сделать? Разве флеш реагирует на JS?
Цитата:

$('embed').attr('wmode', 'opaque');
Так не работает.

iNils 22.05.2010 21:07

Не будет работать.

mooncar 22.05.2010 21:08

Вам же к не флешке нужно обращаться с помощью JS.
Просто делайте перепубликацию - меняйте или wmode или bgcolor.

Если хотите, то и к флешке можно легко обратиться с помощью класса ExternalInterface, который есть и в AS2 и в AS3. Откройте хелп и найдите пример для класса ExternalInterface.addCallback. Что угодно можно изменить в ней на "ходу".

BleSSeD 22.05.2010 23:35

Ну так wmode задаеться с помощью джава скрипта. А как прямо через АС3 задать wmode ?

iNils 23.05.2010 00:08

Никак.

mooncar 23.05.2010 00:10

Можно использовать класс ExternalInterface. Вызываете из флешки с его помощью JS-функцию и перепубликовываете как хотите.

Вот вам близкий пример на AS2. Меняем размеры блока, в котором опубликована флешка:
Код AS1/AS2:

import flash.external.*;
var blockWidth:String = '500px';
var blockHeight:String = '100px';
var javaScriptFunction:String = 'function setSize() { var flash = document.getElementById("flash"); flash.style.width = "' + blockWidth +'"; flash.style.height = "' + blockHeight +'"; }';
ExternalInterface.call (javaScriptFunction); //в нужный момент вызываем

В данном примере блок <div> с флешкой должен иметь id="flash"
Просто напишите функцию, которая будет перепубликовывать флешку и вызывайте ее из флеша с помощью ExternalInterface.call

BleSSeD 23.05.2010 00:54

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

mooncar 23.05.2010 00:57

Вам в процессе выполнения флешки нужно? То есть "после вставки" == "в процессе выполнения" ?
Видимо без перепубликации никак.

Цитата:

Сообщение от BleSSeD (Сообщение 910267)
насколько я понял это нужно джава скриптом передать в флешку команду, и сама флешка изменит свой wmode ?

Нет, не так.

Вообще:
ExternalInterface.call - вызывает JS-функцию на странице.
ExternalInterface.addCallback - вызывает со страницы функцию внутри флешки.

Я так понял, что вариант с изменяемой прозрачностью внутреннего фона флешки (когда она сама опубликована изначально прозрачной) - тоже подходящее решение, вот пример набросал:
http://21multihinge.ru/dyn/dyn.htm

Флешка публикуется изначально с wmode = 'transparent'.
Затем с помощью метода ExternalInterface.addCallback меняем прозрачность некого фона bg внутри флешки.

Если интересны подробности, то вот код AS2:
Код AS1/AS2:

import flash.external.*;
var setBg:Boolean = ExternalInterface.addCallback('setBackground', null, setBackgroundMode);
function setBackgroundMode (modes:String) {
        switch (modes) {
                case 'non_bg':
                        bg._alpha = 0;
                break ;
                case 'with_bg':
                        bg._alpha = 100;
                break ;
        }
 
        test.text = str + bg._alpha ;       
}
var str:String = 'Прозрачность фона = ';

Основной код на странице:
Код:

<head>
.....
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
function setWmode(mode) {
        var flash = document.getElementById("dynamic");
        flash.setBackground(mode);
}
</script>
</head>

<body>
....
<div style="width:240px; height:400px">
<div id="dynamic">
....
<script type="text/javascript">
var pFlashvars = false;
var pParams= { menu: 'false', allowScriptAccess: 'always', allowFullScreen: 'false', quality: 'high', bgcolor: '#88909A', wmode: 'transparent' };
var pAttributes = false;
swfobject.embedSWF('dynattr.swf', 'dynamic', '240', '400', '8.0.0', 'expressInstall.swf', pFlashvars, pParams, pAttributes);
</script>
....
<input type="button" value="Отключить внутренний фон у флешки" onclick="setWmode('non_bg')" style="width:240px"/>
<input type="button" value="Включить внутренний фон у флешки" onclick="setWmode('with_bg')" style="width:240px"/>
....
</body>
</html>



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

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