Вход

Просмотр полной версии : Сделал меню, но оно ведет себя странно...


GreatRash
15.08.2007, 13:23
Вобщем сделал менюшку: при наведении на кнопки они плавно загораются, а при отведении мышки - плавно тухнут. Все вроде бы нормально, но если двигать мышку быстро, то меню начинает работать совершенно наоборот.

Допустим я плавно спокойно навел на кнопку курсор - она плавно загорелась и когда я его убрал плавно погасла.
Потом я навел курсор резко (ведь юзер не будет плавно мышкой водить) - кнопка загорелась как надо, но после того как я так же резко убираю курсор кнопка остается зажженной :o
Если я наведу курсор на кнопку снова, то она погаснет (причем не плавно, а резко), и наоборот если отведу то она зажжется (тоже резко)...т.е. меню работает наоборот...

Объясните пожалуйста что я не так делаю.

код:


function rollUP() {
this.gotoAndPlay(1);
}
function rollDOWN() {
this.gotoAndPlay(5);
}
function releaseOUT() {
this.gotoAndPlay(5);
}

but1_mc.onRollOver = rollUP;
but1_mc.onRollOut = rollDOWN;
but1_mc.onReleaseOutside = releaseOUT;

but2_mc.onRollOver = rollUP;
but2_mc.onRollOut = rollDOWN;
but2_mc.onReleaseOutside = releaseOUT;

but3_mc.onRollOver = rollUP;
but3_mc.onRollOut = rollDOWN;
but3_mc.onReleaseOutside = releaseOUT;

but4_mc.onRollOver = rollUP;
but4_mc.onRollOut = rollDOWN;
but4_mc.onReleaseOutside = releaseOUT;

but5_mc.onRollOver = rollUP;
but5_mc.onRollOut = rollDOWN;
but5_mc.onReleaseOutside = releaseOUT;

but6_mc.onRollOver = rollUP;
but6_mc.onRollOut = rollDOWN;
but6_mc.onReleaseOutside = releaseOUT;


Кстати у меня Flash MX 2004

GreatRash
15.08.2007, 17:33
В кнопках разобрался...всем спасибо за помощь :D

Возник такой вопрос: а можно ли менять размер флэша в зависимости от того сколько кнопок в нем?

etc
15.08.2007, 17:35
С помощью JavaScript.

GreatRash
15.08.2007, 17:39
А как это? Как я узнаю сколько кнопок создалось? Они у меня циклом создаются...
Я вот поэтому уроку делаю: http://www.intuit.ru/department/internet/flashmxstudio/15/4.html

etc
15.08.2007, 17:43
А складывать общую высоту в цикле нельзя что-ли?

GreatRash
15.08.2007, 17:50
Хм... логично, (правда у меня ширина, но это не важно) сам бы не догнал наверное. Только вот не понятно, что дальше делать с какого боку JS применять? Передавать в него значение общей ширины (допустим 200 px), а потом чего? Т.е. разве с помощью JS можно размер флэша изменить (я имею ввиду не размер в HTML, а размер самого ролика)

etc
15.08.2007, 18:48
Я говорил про изменение размера блока div в html, содержащий флешку. С обычным Standalone Flash Player этого сделать невозможно.

GreatRash
15.08.2007, 19:11
Жаль...
я вот тут поиск по форуму поюзал и нашел такую вещь как Stage.width, она тоже не будет работать?

etc
15.08.2007, 19:17
Это свойство только для чтения.

GreatRash
15.08.2007, 19:24
Понятно, спасибо за помощь.

Кстати, почему когда меняется ширина дива (скриптом), а у флеша, вложенного в див стоят размеры 100%х100% обрезается кусок клипа (левый - там где координаты 0px 0px)? Причем хорошо так обрезается пикселей на 100... а в Мозилле вообще размеры дива не меняются :(
стоит свойство Stage.scaleMode = "noScale";

Molecula
15.08.2007, 19:50
Ну это уже по вёрстке вопросы пошли...у броузеров свои причуды.

Wolsh
15.08.2007, 22:50
У тебя наверно флэшка в центре дива поставлена?

Я вот так делал флв-плеер, меняющий размеры в зависимости от фильма без перезагрузки страницы (флэшка вставлена стандартным SWF Object):
В мозги пишем прелюдию и заодно саму функцию автосайза
<script type="text/javascript">
var MSIE = false;
</script>
<!--[if IE]>
<script type="text/javascript">
var MSIE = true;
</script>
<![endif]-->

<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
function getFlashElement (id) {
return MSIE ? window[id] : document[id];
}

function toFlash (addr) {
var flash = getFlashElement("player");
flash.SetVariable('mov', addr);
}
function autosize(w,h){
DI = document.getElementById('flashcontent').style;
//DI=flashcontent.style;
DI.width=w;
DI.height=h;
};
</script>


Вставляем флэшку
<div id="flashcontent" style="overflow: hidden;">
тута типа флэшка будет щас
</div>

<script type="text/javascript">
var so = new SWFObject("tvplayer3.swf", "player", "640", "510", "#ff0000");
so.addParam("wmode", "transparent");
//so.addVariable("mov","gta.flv");
so.write("flashcontent");
</script>

И например такие ссылки на фильмики, которые флэшка будет показывать, ресайзясь под их размер
<a href="javascript: toFlash('NEW_MIF.flv');">NEW_MIF</a>
. . . . . . .
<a href="javascript: toFlash('fantasy.flv');">Final Fantasy</a>
. . . . . . .
<a href="javascript: toFlash('nemogot.flv');"> B~G </a>
. . . . . . .
<a href="javascript: toFlash('romar.flv');">BloodRayne</a>

Ну а функцию автосайза вызываем из флэша, когда станут известны размеры кина :)
w = my_video._width;
h = my_video._height;
getURL("javascript: autosize("+w+", "+h+");");

Надеюсь, найдешь параллели и эти наработки тебе пригодятся :)

GreatRash
16.08.2007, 11:50
JS выдает ошибку: "SWFObject - определение отсутствует"

etc
16.08.2007, 13:11
А скрипт swfobject.js лежит рядом с флешкой?

GreatRash
16.08.2007, 13:44
Нет, а что это за скрипт?

etc
16.08.2007, 13:51
http://noregret.org/tutor/swfobject/

GreatRash
16.08.2007, 14:19
Все заработало, только это все равно не то...
Этот метод просто вставляет в див флешку, а то что не поместилос обрезает с помощью overflow: hidden;
Во-первых в мозилле ничего не обрезается...
Во-вторых можно было бы и без этого скрипта (SWFObject) сделать...
Ну а в-третьих это все равно не то, что я хотел.

Но все равно всем спасибо, кто помочь пытался. Я много нового почерпнул.

Wolsh
16.08.2007, 14:43
Да просто в точности то, что нужно Вам, в принципе не реализуемо. Единственный параметр, отвечающий за размер окна - только для чтения.
Поэтому всё что можно сделать - менять размер сцены ВНУТРИ некоего большого окна, прижав сцену влево вверх, а оставшееся пустое пространство обрезать дивом... Здесь - реализация этого способа "на лету", т.е. в любой момент времени Вы можете сделать видимую флэшку любого размера. Буду искренне рад, если кто-то предложит другой вариант, т.к. этот действительно не работает в ФФ, непонимающем overflow: hidden :(
______________________
загрузка нового клипа в _root меняет размер окна, но не знаю как Вы сможете этим воспользоваться :) все что было в вашей свф до этого, погибнет. Загрузка же loadMovieNum (на другой уровень) никак на размер окна не влияет.

Molecula
16.08.2007, 14:46
Напишите свой плагин к флешу, что б сцена резайзилась и не мучайтесь.

GreatRash
16.08.2007, 16:54
2Molecula смешно...если я в AS не шарю толком, куда уж мне плагины писать.

2Wolsh очень жаль, что Мозилла не понимает overflow: hidden; Просто задумка была меню разместить по центру экрана, но, видимо, придется сделать слева/справа или кнопки вниз дублировать...