PDA

Просмотр полной версии : Вопрос по меню на Flash


d0cent
29.11.2005, 08:34
Народ. Делаю вот такое меню:

http://a201.allfiles.ru/menu.swf

Там есть два пункта с выпадающими подменю.
Допустим открыли одно из этих двух выпадающих меню (например "о компании"), а затем, не сворачивая первого, кликнули на второе выпадающее меню ("условия работы"). У меня там активное меню сварачивается после чего приходится еще раз кликать по второму выпадающему меню что бы его развернуть.
Внимание, вопрос. Подскажите пожалуйста, как сделать так что бы при клике на другое выпадающее меню, при раскрытом первом, первое меню плавно свернулось и сразу плавно развернулось то, на которое кликнули?

Буньков Максим
29.11.2005, 20:25
Поди флешь сайты делаешь за деньги?
Все это делают функции это у тебя одна тимелине вод и юзаешь головку (воспроизводящюю) как тебе надо при каждом клике....
Знаешь че такое функции? а АС2? а ООП?

d0cent
29.11.2005, 21:49
Поди флешь сайты делаешь за деньги?
Все это делают функции это у тебя одна тимелине вод и юзаешь головку (воспроизводящюю) как тебе надо при каждом клике....
Знаешь че такое функции? а АС2? а ООП?

Не, ну это так принято что ли теперь? Я нормально вопрос задал. Тут некоторые вообще, чуть ли не за них все сделать просят, а я разве что-нибудь нереальное спросил?
И разве надо быть профессиональным программистом, что бы простенькое меню сделать? Или для вас это тоже слишком сложно что не можете просто объяснить и предпочитаете "блистать умом", произнося умные слова? У вас самих образование какое? А сколько языков программирования знаете? Только Action Script 2? Я вот совсем не считаю себя программистом, хотя владею тремя языками. То что я не знаю Action Script, это вопрос времени, затем я и пришел сюда. Но видимо я ошибался, профессионалы здесь все перевелись, остались только "профессионалы".

Nirth
29.11.2005, 22:06
используй флаги, проверяй открыто ли меню или нет и веди анимацию, почитай про if\if else\else

d0cent
29.11.2005, 22:13
используй флаги, проверяй открыто ли меню или нет и веди анимацию, почитай про if\if else\else

Спасиб. А как это делать? Может где туториал внятный по этой теме есть?

d0cent
29.11.2005, 23:06
да, интересует именно флаги и то как проверить открыто меню или нет.

MOHCTEP
30.11.2005, 02:08
Каждую ссылку обзаводишь переменной-флагом, изначально, допустим, ложным. При нажатии ссылки просматриваешь все флаги и если находится истинный, даешь команду на закрытие, соответствующего ему, пункта меню и установки флага в ложь. После окрываешь пункт, куды клюкнули и ставишь его флаг в истину. Вроде все...

Король
30.11.2005, 03:15
а это я случайно 2 раза запостил

Король
30.11.2005, 03:16
да просто это делается - по нажатию на пункт закрываешь все (предварительно можно создать массив высот всех пунктов в закрытом положении) и открываешь тот который нажал

d0cent
30.11.2005, 03:16
Ну теория это все конечно понятно. Но как это сделать на практике? Вот как например переменную флаг к ссылке привязать? Это не говоря уже о всяких там массивах высот....

Король
30.11.2005, 03:18
какой ссылке, чувак? и зачем тебе флаг? закрыл все - открыл один, закрыл все - открыл другой и так каждый раз

d0cent
30.11.2005, 03:20
какой ссылке, чувак? и зачем тебе флаг? закрыл все - открыл один, закрыл все - открыл другой и так каждый раз

Это как? Вы бы подсказали бы как это все пишется, я на ActionScript почти что ничего не программировал. Куда и что вписывать я не знаю. Чайник совсем.

Король
30.11.2005, 03:28
короче у меня тут разгар рабочего дня и тд, так что в коде куча ошибок(возможно) но ты уверен найдешь их сам. и сам напишешь 2 недостающие функции

gap = 5
for(var i=0;i<10;i++){
noo = _root.attachMovie("punkt_menu", "punkt_menu"+i,i)
noo._y = i*noo._height + gap
noo.y = noo._y
noo.num = i;
noo.contentHeight = высота вложенного меню для этого пункта
noo.onRelease = expandThis(noo)
}
expandThis = function(noo){
if(!this.expanded){
this.expanded = true
for(var i=noo.num; i<10;i++){
_root["punkt_menu"+i]._y += noo.contentHeight
}
noo.showContent(noo)
}else{
this.expanded = false
for(var i=noo.num; i<10;i++){
_root["punkt_menu"+i]._y -= noo.contentHeight
}
this._y = this.y

this.hideContent()

}

d0cent
30.11.2005, 03:32
а писать то это все где? я только знаю как там какому-то кадру или элементу что-либо приписать.
И кстати, неужели нельзя как-нибудь проще с обычным таймлайном что-нибудь сделать?

Король
30.11.2005, 03:55
можно сделать с таймлайном но это не будет проще. а прописывать это в кадре

d0cent
30.11.2005, 03:58
Вообще, мне вот было бы проще с таймлайном. Я больше дизайнер чем программер.

Король
30.11.2005, 04:18
ну так у тебя ж пока не получается ни так ни так насколько я понял)) так что ты не "больше дизайнер чем программер" а "меньше программер чем дизайнер"

d0cent
30.11.2005, 04:21
Ну вот анимация вся и расположение по временной шкале у меня уже задано. И изначально рассчитывал это все в таймлайне делать. Потому там и прямая анимация и реверс, все это именно по кадрам сделано. Кода почти никакого нет. Именно поэтому мне сложно представить куда там какой код запихнуть можно.

Король
30.11.2005, 04:40
чувак, я не могу понять - чего ты хочешь. я тебе написал код который сделает меню с чистого листа - почтим на 80 процентов готовый. без всякой анимации. ты отвечаешь что нет, кодом ты не хочешь а хочешь анимацией - ну пожалуйста, делай. только у тебя же не получается. вот и решай что проще - продолжать мучиться с анимацией или проанализировать код и доделать его. я все сказал

и вот доделаный код

gap = 5;
for (var i = 0; i<10; i++) {
noo = _root.attachMovie("punkt_menu", "punkt_menu"+i, i);
noo._y = i*(noo._height+gap);
noo.y = noo._y;
noo.num = i;
noo.expanded = false
noo.contentHeight = 50;
noo.onRelease = function() {
this.expandThis();
};
}
MovieClip.prototype.expandThis = function () {
if (!this.expanded) {
trace(this.num)
for (var i = 0; i<10; i++) {
_root["punkt_menu"+i]._y = _root["punkt_menu"+i].y;
}
for (var i = this.num+1; i<10; i++) {
_root["punkt_menu"+i]._y += this.contentHeight
}
this.expanded = true;
this.showContent(noo);
} else {
this.expanded = false;
for (var i = this.num+1; i<10; i++) {
_root["punkt_menu"+i]._y = _root["punkt_menu"+i].y;
}
this._y = this.y;
this.hideContent();
}
};

d0cent
30.11.2005, 05:13
Это спасибо конечно. Но меню-то у меня нарисовано и анимация вся задана. См. начало топика, там ссылка есть. Надо бы только сделать что бы при клике на другом пункте меню сворачивалось и не останавливалось как у меня до следующего клика, а продолжало развертывать пункт на котором кликнули.

А код я не знаю как правильно вставить и связать с нарисованным, что бы заработало все. Уж простите ламера...

Буньков Максим
30.11.2005, 07:00
Ты пытаешься сходить по большому... а у тя запор.. тебе надо программера нанимать... исходники выдавать запрещают... значит тебе тока коды и дают, а если ны не знаешь синтаксис... ну что я могу посоветовать... тебе в раздел Работа...

Буньков Максим
30.11.2005, 07:28
Не, ну это так принято что ли теперь? Я нормально вопрос задал. Тут некоторые вообще, чуть ли не за них все сделать просят, а я разве что-нибудь нереальное спросил?
И разве надо быть профессиональным программистом, что бы простенькое меню сделать? Или для вас это тоже слишком сложно что не можете просто объяснить и предпочитаете "блистать умом", произнося умные слова? У вас самих образование какое? А сколько языков программирования знаете? Только Action Script 2? Я вот совсем не считаю себя программистом, хотя владею тремя языками. То что я не знаю Action Script, это вопрос времени, затем я и пришел сюда. Но видимо я ошибался, профессионалы здесь все перевелись, остались только "профессионалы".
Ты меня конечно прости... но меня раздражает когда люди не пытаются что то сами изучить, у них это просто не получается...потому что у них горят сроки по флешу.. а флешь они не знают... приходят на флешер ру и просят исходники... дак вот я зол на тебя ты уж прости мой характер... присылаю тебе исходник... нацеленный на дизайнера... потому что ужасно сделан.. но решает твою проблему.

Antares
30.11.2005, 07:30
Господа д0цент и Буньков Максим! Подобные речи здесь никому кроме вас не интересны, так что пошли бы вы с ними в PM или IM.

Тема закрыта.