FLASH, И ГОТОВО! Красивое меню-трансформер Iv (dembicki@narod.ru) Спецвыпуск Xakep, номер #027, стр. 027-066-7 Обрати внимание, что я добавил 4 к значениям ширины и высоты ролика. Дело в том, что почему-то размер ролика всегда определяется на 4 пиксела меньше. В этом легко убедиться, если восстановить окно из полноэкранного режима в обычный (нажать кнопочку рядом с кнопкой закрытия окна). И если ролику установлены размеры, например, 100х200, то Stage.width и Stage.height примут значение 96х196. Тебе осталось насоздавать свои странички, переделать xml, воткнуть это меню в левый фрейм, а правый фрейм обозвать "mainFrame" во фрейсете. АНТИКЭШ Ты обязательно должен учесть то обстоятельство, что у юзверя закэшируется и меню, и запрашиваемый xml. Поэтому, если будешь вносить изменения в меню, рекомендую его просто переименовывать, добавляй, например, номер версии в имя. А чтобы не кэшировался xml, такое решение будет не лучшим. Я бы рекомендовал просто добавить в запрос уникальный параметр. Идеально для этого случая подходит количество миллисекунд, возвращаемое функцией getTime. Замени запрос на получение xml на this.input_xml.load("flash_menu.xml?r="+new Date().getTime()); и тестани - в режиме теста будет выдано сообщение об ошибке открытия файла. Но этого не произойдет в реальной сети. Чтобы этот трабл нас в дальнейшем не беспокоил, создадим функцию, которая будет проверять, в он-лайне или локально просматривается ролик, и если в он-лайне, то добавлять антикэш. function antiCash(address) { if (_url.substr(0, 4) == "file") { return address; } if (address.indexOf("?") != -1) { return address+"&r="+new Date().getTime(); } else { return address+"?r="+new Date().getTime(); } } Теперь можно заменить запрос на получение xml на: this.input_xml.load(_root.antiCash("flash_menu.xml")); Заметь, если ты захочешь получать xml от серверного скрипта с параметрами, то запрос вида: this.input_xml.load(_root.antiCash("flash_menu.php?page=main")); обработается корректно, строка url соберется в такую: flash_menu.php?page=main&r=237546894375 В процессе написания статьи у моего бета-тестера (мои благодарности, mr.Donor) возник закономерный вопрос: "А как сделать, например, анимацию появления элементов меню?". Я согласен с тем, что для неопытного человека это может вызвать массу затруднений. Давай разбираться. Первым делом изменим функцию onLoad общего класса: расставим мувиклипы слева от экрана, но каждый на своем месте по высоте. g_tmp.onLoad = function() { var nod = _root.input_xml[this.i]; this._y = (this.i-1)*20; // эта строка изменилась this.x = nod.attributes.tab*20; // эти 2 строки добавились this._x = -100; this.counter = this.i*5; // this.icon.stop(); this.name_txt.autoSize = true; this.name_txt.text = nod.attributes.name; }; Итак, что мы сделали? мы не стали расставлять мувики сразу по оси _x в нужные места, а только установили им цель: this.x Также задали this.counter - переменная, которая будет определять задержку старта движения мувиклипа. Эта переменная рассчитывается как номер мувика, умноженный на любое число (попробуй поизменять это число и посмотри, что получится). |