PDA

Просмотр полной версии : как из флеша изменить метод объекта родительского окна


sergeyrg
29.09.2009, 12:55
всем доброго времени суток,
вопрос такой:
у меня флешка находится в диве с display:none
по нажатию на уменьшенную катинку (onclick=flash_show(); ) этот display делается block
как мне сделать чтобы по нажатию в поле флешки в родительском файле активировалась заготовленная JS-функция flash_hide() {var mapblock = document.getElementById('big_map');
mapblock.style.display='none';} которая скроет этот див (а не закроет флешку насовсем)


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

alexcon314
29.09.2009, 13:00
ExternalInterface

sergeyrg
29.09.2009, 13:29
я очень извиняюсь за назойливость, но у меня не очень с английским и возможности нет скачать 2х метровый архивчик, да и развёрный ответ наверное пригодится кому то ещё, не могди бы вы рассказать для "особо одарённых" попроще, типа: берёш бэкграуд флешки, делаешь кнопкой, жмешь ф9, пишешь "комманда".. ну или типа того

буду оооочень признателен :)

alexcon314
29.09.2009, 14:15
Пример:
флэш:
import flash.external.*;

btn.onPress = function() {
var jsFunction:String = "sayHello";
var param:String = "browser";
var retValue:String = String(ExternalInterface.call(jsFunction, param));
};
JS (в теле страницы):
<script>
function sayHello(name) {
alert(">> Hello " + name + ".");
return ">> Hi Flash.";
}
</script>

sergeyrg
29.09.2009, 17:57
ничего не получается :(

в коде AS :
import flash.external.*;
bg_button.onPress = function() {
var jsFunction:String = "show_map";
var param:String = "none";
var retValue:String = String(ExternalInterface.call(jsFunction, param));
}

встроенный дебагер ругается:
**Error** Scene=Scene 1, layer=bg, frame=1:Line 1: Statement must appear within on handler
import flash.external.*;

**Error** Scene=Scene 1, layer=bg, frame=1:Line 2: Statement must appear within on handler
bg_button.onPress = function() {

Total ActionScript Errors: 2 Reported Errors: 2


изменил на:

import flash.external.*;
on (press) {
var jsFunction:String = "show_map";
var param:String = "none";
var retValue:String = String(ExternalInterface.call(jsFunction, param));
}
перестало ругаться на вторую строку
я просто нигде не могу найти нормальное описание функции import, насколько я понимаю эта функция позволяет импортировать внешние классы, так это получается что мне нужно ещё написать отдельный класс??

я принцип понять не могу :(

мне нужно скриптом в файле name.html (флешка находится в нем же) запустить жаваскриптовую функцию show_map() с параметром "none"

<script>
function show_map(vall) {
var mapblock = document.getElementById('big_map');
mapblock.style.display=vall;
}
</script>

что я не так делаю???

Добавлено через 49 минут
нашел вариант решения:
on (press) {
getURL("javascript:history.go(0)");
}
но но к сожалению не прячет флэшку а перегружает страницу на которой флешка изначально спрятана

гуру флэша - помогите добиться задуманного

alexcon314
30.09.2009, 11:44
Код надо писать не на кнопке, а на главной временной шкале. btn - это instance name вашей кнопки на сцене.

sergeyrg
30.09.2009, 12:42
Код надо писать не на кнопке, а на главной временной шкале. btn - это instance name вашей кнопки на сцене.

спасибо большое, всё заработало

может поможете ещё с двумя вопросами?
1. при установке прозрачности wmode='transparent' в FireFox сбивается половина кнопок по координатакм
2. как вычислить координаты мыши - мне нужно отследить уход курсора с флешки и на это событие повесить функцию, сделал фон кнопкой, прописал на RollOut, но при наведение на любую другую кнопку тоже срабатывает, а мне нужно чтобы отрабатывалось только при покидании курсором пределов всей флешки

Добавлено через 5 часов 21 минуту
ничего не пойму, толи у меня софт не такой, короче - если делать так как здесь советуют по всем топикам: в главной форме описывать

bg_button.onPress = function() {
.....
}
то ничего не работает - но и дебагер не ругается,

а если в самой кнопке писать:

on (press) {
.....
}

тогда всё работает

что за бред? в настройках стоит AS2
софт - macromedia flash professional 8

что это может быть?

alexcon314
01.10.2009, 08:29
Выкладывайте исходник.

sergeyrg
01.10.2009, 11:15
у меня не получилось уменьшить так чтобы архив был меньше 300к, поэтому разбил его на 2 тома, чтоб распаковать нужно стереть .zip у обоих томов и распаковать (сжимал програмой 7zip)
в 3м архиве хтмл-ка

alexcon314
01.10.2009, 18:24
Ваш исходник работает. Все что нужно сделать, это найти на сцене кнопку kharkov и на панели свойств указать для нее Instance Name kharkov.