Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Методика изготовления сайта. Требуется совет опытных флешеров. (http://www.flasher.ru/forum/showthread.php?t=137372)

a1. 11.03.2010 17:52

Методика изготовления сайта. Требуется совет опытных флешеров.
 
Вот все никак не могу начать правильно делать сайты, все не покидает чувство, что делаю что-то не правильно.
Например, можно ли в методе определять функцию?
Код AS3:

public function methodName()
{
        btn.addEventListener(MouseEvent.CLICK, goToGoogle);
        function goToGoogle(e:MouseEvent)
        {
                navigateToURL(new URLRequest('http://www.google.com'), '_blank');
        }
}

Можно ли так делать? Точнее, правильно ли?
Это пример, про замыкания знаю:)

Или самый важный вопрос.
Например, сайт с несколькими страницами и фото галереей.
Делаю так.
Класс Main - главная страница, шаблон.
На каждую страницу свой класс. Экземпляр страницы помещается сверху с координатами, допустим (50, 150). Т.е. страница имеет эту точку в качестве нулевой. Что же делать, когда надо, допустим, затемнить всю страницу для вывода модального окна? Событие диспатчить на главную, чтобы она все зарывала? Тогда не закроются элементы самой подстраницы. В ином случае возникает проблема с координатами.

Или страница галереи. Хочу, чтобы фотки вылетали сверху экрана. Как вычислять координаты? Каждая фотка - экземпляр класса Photo с параметрами уменьшенной картинки, полного изображения, описания и т.д. Как выводить увеличенное изображение с навигацией (предыдущая/следующая)? Это должен делать экземпляр класса Gallery? Или выводить увеличенное изображение экземпляром Photo? Тогда опять проблема с затемнением фона и определением предыдущего/следующего изображения.

Я понимаю, что координаты относительно stage можно вычислить (кстати, подскажите как правильнее это сделать заодно :rolleyes:), но может я делаю просто не так как надо и есть более верное и красивое решение?

Сайты делаю, неплохо получается, но всегда такое ощущение, что сделал что-то неправильно.
Бывалые, подскажите, как правильно это всё делать?

etc 11.03.2010 18:34

Цитата:

Сообщение от a1. (Сообщение 892462)
Можно ли так делать? Точнее, правильно ли?

Делать можно, но неправильно. Объявляйте методы-обработчики.

oleg_tomenko 11.03.2010 19:11

Все зависит от макетов. У вас настолько неконкретный вопрос, что ответ на него даже затрудняюсь дать. Я стараюсь общие элементы сайта, блоки выносить в классы.
Например, Menu, MenuItem, Page, Gallery. В Mайне всем этим управлять. Как-то так.

Вообще, хорошо бы всегда смотреть — не всегда оправдано делать сайт на флэше. Из-за двух-трех эффектов не стоит даже браться: вполне подойдет джаваскрипт и хтмл. Флэш-то просто инструмент, задача —*сделать хороший сайт.

TERRORist 11.03.2010 20:54

Цитата:

Сообщение от a1. (Сообщение 892462)
Вот все никак не могу начать правильно делать сайты, все не покидает чувство, что делаю что-то не правильно.
Например, можно ли в методе определять функцию?
Код AS3:

public function methodName()
{
        btn.addEventListener(MouseEvent.CLICK, goToGoogle);
        function goToGoogle(e:MouseEvent)
        {
                navigateToURL(new URLRequest('http://www.google.com'), '_blank');
        }
}


А как потом отписаться от такого листенера? если понадобится

AlexDesinger 11.03.2010 21:04

слишком много вопросов - начните с чего то конкретного, у меня, допустим есть опыт сайта полностью на flash, делал для себя - т.е. старался гы гы, у самого был подобный вопрос, когда начал делать, но к сожалению, тогда толком тоже не смог никто помочь, потому что я так же спрашивал, как и вы - особо сам не понимая о чем, так что, сейчас, пожалуй, пока воспоминания свежи, возможно и смогу помочь.

Насчет функции в функции или функции в методе - вот мои соображения, после хождения по этим граблям:
Так делать можно, но лишь в некоторых случаях, например в том случае, когда требуется сделать небольшую "подфункцию" функции, а не полноценную функцию, из которой или к которой планируется обращаться за пределом той функции, в которой она храниться, поскольку область видимости этой функции очень сильно ограничивается и начинаются траблы, особенно когда мало опыта.

Например я использую "подфункцию" в следующем случае -
например создаю экземпляр класса загрузчика, который должен в себя загрузить картинку, но мне требуются некоторые действия выполнить именно по окончании загрузки этой картинки или неудаче.
Что же делать? Внутри класса загрузчика есть кастомный метод, который начинает передавать "вверх" события, по окончании загрузки, естественно, к экземпляру класса на верху присоеденен слушатель этого события, как только оно происходит - тут то и запускаеся та самая подфункция, которая у меня обычно убивает слушатель, поскольку он больше не нужен, и , например, сдвигает картинку по координатам ...и все - в общем то это все на что годны такие функции в функции, запомните только одну вещь - ваша подфункция живет только в момент работы функции, куда она вложена, вобщем по аналогии с локальной переменной в функции, которая живет только в момент работы функции, и видна и требуется, только для выполнения этой функции.

К стати, если кто из более продвинутых кодеров меня поправит, то я только за, потому что написал так, как сам понимаю это.

Art_133 11.03.2010 21:33

Цитата:

Сообщение от etc (Сообщение 892472)
Делать можно, но неправильно. Объявляйте методы-обработчики.

скажите почему так делать не правильно? Вы считаете что такие простые функции как переход по ссылке стоит выносить в отдельную функцию? Если можно накидайте простой пример как нужно делать в данном случае. Просто я часто так делаю и не вижу никаких сложностей с эти методом...

iNils 11.03.2010 21:40

Цитата:

Вы считаете что такие простые функции как переход по ссылке стоит выносить в отдельную функцию?
1. Что будет, если вы дважды вызовите methodName?
2. Что будет, если у вас будет 2 или более экземпляров класса с вызванный методом methodName?

Psycho Tiger 11.03.2010 22:06

Код AS3:

public function methodName()
{
        btn.addEventListener(MouseEvent.CLICK, goToGoogle);
}
private function goToGoogle(e:MouseEvent)
{
        navigateToURL(new URLRequest('http://www.google.com'), '_blank');
}

Создавая такую анонимную функцию как в вашем случае вы никогда от неё не отпишитесь и она навсегда останется в памяти.

Art_133 11.03.2010 22:49

Цитата:

Сообщение от iNils (Сообщение 892508)
1. Что будет, если вы дважды вызовите methodName?
2. Что будет, если у вас будет 2 или более экземпляров класса с вызванный методом methodName?

Пардон. По всей видимости я не правильно понял. Я думал что имелось ввиду метод navigateToUrl правильне было бы вынести в о дельную функцию и уже в обработчике события вписывать ее вместо navigateToURL.

Psycho Tiger 12.03.2010 00:54

Это и имелось ввиду, смотрите мой пример.


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

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