![]() |
Раздвижные блоки
Всем доброго времени суток!
Подскажите пожалуйста новичку! Мне надо сделать так что бы я мог информацию в виде текста помещать в блок ( ну так называемый квадрат просто ) и что бы этот блок раскрывался и складывался показывая тем самым всю и лишь часть информации! Помогите пожалуйста как реализовать сию мысль? Я вообще не имею понятия как это сделать(( Заранее очень признателен. Извиняюсь сразу за некорректность поставленной задачи, я надеюсь более менее все поняли что мне требуется сделать. |
Например, у спрайта есть свойство scrollRect
|
А можно по подробнее объяснить мне процесс реализации? А то я никак не могу понять как мне заставить такую вещь после клика по ней раздвигаться и сдвигаться соответственно после нажатия на другую...
|
Так... определитесь, в первом посте был простой хайдер – нажал-открылся, нажал-закрылся.
Сейчас Вы говорите о закрытии при нажатии на ДРУГОЙ блок. А это уже не хайдер, а что-то типа Аккордеона. Уточните ТЗ)) Добавлено через 7 минут Main.as Код AS3:
Код AS3:
|
Мне необходимо что бы именно как аккордеон был, так вы это назвали, то есть в при нажатии на один блок он раскрывается, а потом при нажатии на другой, первый закрывается)
Извините за не правильную формулировку изначальную) Добавлено через 20 минут А и вот еще сама суть проблемы и ради чего я это все спросил в том, что возник вопросик с выводом данных из БД. Сейчас вывод происходит в таблицу.. (DataGrid), а нужно сделать вывод строчный. Это связано с дизайном приложения. Код AS3:
а нужно вывести в такой вид Имя Новость Информация (какая нибудь кнопка ) дата. По принципу раскрывающегося блока, ну то есть когда блок скрыт видно только треть информации, а при нажатии на него всю. Ну тоесть свобода размещения и форматирования. Подскажите пожалуйста. вот php код: PHP код:
И извините за нубский вопрос... но я никак не пойму что именно мне сделать кодом, который вы предоставили =( Объясните пожалуйста( |
Опять не понял(( Может на солнце пятна и телепатические способности мои пофиксились.. Как-то ваш текст трояко можно понять.. могли бы вы сварганить картинку, как примерно эти "строки" должны выглядеть закрытые и раскрытые? Я так понимаю, что "новость" и "информация" это не два-три слова, как это все долно быть размещено в блоке? Не представляю. Изобразите? Хоть в гуглдоках))
|
http://cs5126.vkontakte.ru/u2473597/...x_7e9b3916.jpg
Вот я накидал картинку =) Вот что-то такое мне требуется =) Добавлено через 5 минут А вот тут если как должно быть на самом деле, примерно конечно это просто в FS накидал =) http://cs5126.vkontakte.ru/u2473597/...x_981e0e9e.jpg |
Вложений: 1
Вот пример, проект для FlashDevelop, не знаю каким редактором пользуетесь Вы и сможете ли переделать под Флэш ИДЕ если что.
В локальном плеере свфка (лежит в bin/) скорее всего не запустится, не сможет загрузить xml (имитирует ответ сервера)), если не добавить проект в доверенную директорию или не открыть в ФД. Разбирайтесь, удачи))) |
Вообще все делаю =) Adobe Flash Professional CS5 =)
Спасибо большое =) Буду сейчас пытаться =) |
Вложений: 1
Ок. Вот для CS5.
|
Спасибо большое за помощь=)) буду пытаться сейчас =))
Добавлено через 22 минуты Спаасибо огромное это именно то что нужно =))))) Просто анреал помогли))) Только вопросик такой есть еще последний, а зачем все так разбито? Ведь можно все соединить во едино? =) И ведь я смогу туда впихивать данные из своей БД? по тому же принципу как вы из XML =) |
Здравствуйте, а хотел поинтересоваться, вот эти раздвижные блоки у вас реализованы не как объекты сцены, а если у меня приложение всё на сценах построено...как мне раздвижные блоки порой убирать...
более подробно. при нажатии на определенную кнопку у меня срабатывает скрипт с раздвижными блоками выдаёт мне информацию затем при нажатии на другую кнопку у меня он должен убрать её. как если со сценой listbool |
Drac0Sha, к сожалению Вам я не могу ничем помочь, ибо во Flash IDE вообще не работаю и никогда за всю жизнь, ни разу, не пользовался Сценами. Я не мультипликатор, а Программы не делаются на таймлайне, сорри.
kaploson, "все так разбито" для удобства, это основы ООП - выделяется область связной функциональности и оформляется в отдельный Объект, в котором эта функциональность может быть обособлена от остального кода (инкапсулирована). Объект выполняет какие-то функции по запросу извне, но как он это делает – остальному коду "неизвестно", он только спрашивает и получает ответ, или просит что-то сделать и Объект это делает. Что при этом происходит в самом объекте – никого не трогает, это его "личное дело", "секрет фирмы". Это упрощает обслуживание кода и его повторное использование. Например, если я захочу изменить отображение "системных" блочков в этом проекте, мне не надо ворошить 10000 строк кода – я открою файл IconLabel.as и внесу требуемые изменения; и не менее важно, что в ДРУГОМ проекте мне не надо копипастить и как-то подгонять под остальной код эту функциональность - я просто беру уже готовый класс IconLabel и использую его, если надо - расширяю. Вы это делаете постоянно с классами, данными Адобом вместе с Флэш. С кастомными классами та же история, если делать их грамотно, не хардкодить (не забивать жестко настройки, а давать возможность настраивать объект извне), получится со временем своя библиотека классов, которые можно использовать в разных проектах повторно - еще одна из важных концепций ООП, универсальность. 2. Конечно сможете, я в Вас верю)) Ничто технически этому не мешает. Я использовал XML просто потому что тогда для показа примера не нужен сервер и серверный скрипт, и база данных)))))) Получение и разбор данных будут другие, но вопрос то ваш был не об этом, а о раздвижных блоках. И это тоже относится к разделению обязанностей между Объектами. В идеале должно получаться так, что получением и разбором данных занимается специальный объект лоадер/парсер данных, а показом их на экране – другой объект-визуализатор. Чем слабже связанность между ними, тем лучше. В идеале вы должны иметь возможность в любой момент поменять лоадер-парсер с XMLного на JSONовский или любой другой формат общения с сервером, НЕ ЗАТРАГИВАЯ при этом визуализатор. Надеюсь, я не слишком тут сложно изъяснялся... Удачи еще раз. |
Цитата:
|
Спасибо большое, за такой развернутый ответ, буду сидеть все изучать =))
|
ну я программу не на таймлане делаю. просто пользуюсь addChild
а с раздвижными блоками насколько понял так нельзя ничего так же не получилось и с методом DisplayObjectContainer |
Тогда поясните, что у Вас "сцены". Возможно загвоздка в терминологии)
|
у меня два вопроса теперь к вам, если вам не трудно ответить )
1.насчёт "сцен" все объекты, которые выводятся на экран при нажатии той или иной кнопки, вызываемые scene.addChild я назвал сценами и их можно убрать с помощью листбула ааа с раздвижными блоками немного не ясно как это происходит ) 2. Код:
<?xml version="1.0" encoding="utf-8" ?> у меня естественно другой и тэги другие при нажатии в Charles смотрел с сервера выводит так как надо а на экран нет в чем может быть проблема!? |
кто такой листбул?
кто такой Charles? другие теги - надо и парсить эти другие теги, а не мои. Слушайте, я привел пример, как сделать блоки. Это пример, не универсальный фреймворк и даже не компонент. Вы можете использовать идею, КАК, но вряд ли можно просто скопипастить код. Надо его понять и написать свой. Это не мой подарок человечеству, это только подсказка, как можно реализовать. |
1. первый вопрос отклоняется )
2.я понимаю, и я пытаюсь понять сразу на примере. я и парьсю естественно другие теги. извините, что потревожил ) спасибо в любом случаи ) попытаюсь разорабраться ) |
Немного прокомментирую писанину.
Сначала создал класс ИнфоБлок. Это дисплейный объект-контейнер, поэтому наследуем Спрайт. У ИнфоБлока будет 2 состояния - скрытый и раскрытый. Их отличие - в кол-ве элементов и соответственно в размере. В скрытом состоянии показывается несколько элементов, их сразу добавляем в контейнер и они сразу отображаются. А дополнительный элемент - в данном случае это одно текстовое поле - будет показываться (добавляться в контейнер отображения) только в режиме "раскрытый". Фон блока будет перерисовываться при изменении режимов в соответствии с новым размером контента. Само собой, кол-во и порядок элементов для режимов вы определяете сами и дописываете соответствующий код сами. Для перехода из одного состояния в другое сделаем либо два метода-переключалки, либо один метод с передачей параметра Режим, либо его вариант - просто сеттер, как у меня, устанавливающий флаг "скрытый/не скрытый", и запускающий метод, непосредственно меняющий отображение. Вот и весь ИнфоБлок. Можно было бы сделать внутреннюю реализацию реагирования на мышь, но я оставил эту заботу внешнему менеджеру, чтобы позволить ему решать логику при работе с несколькими такими блоками. Ведь если блок будет сам раскрываться /закрываться только при нажатии на него, как нам реализовать закрытие других блоков при открытии одного? Блоки надо связать в систему, которая будет контролировать их все. Лучше было бы сделать отдельный класс, но я написал это все в Мейне, видимо из лени или чтобы не усложнять вам восприятие. Менеджер работает с массивом ИнфоБлоков. Когда лоадер загрузил данные, парсер пробежался по списку и создал нужное кол-во ИнфоБлоков, передав им необходимые фрагменты этих данных для отображения. Создавая блок, он тут же записывает ссылку на него в массив для Менеджера, и блоку добавляется листенер клика мыши для обработки функциями менеджера. Когда блок кликают, менеджер определяет, что это за блок конкретно и вызывает у него сеттер состояния, меняя его на противоположное. Размер блока меняется, и менеджеру надо закрыть остальные блоки и сместить их для сохранения правильного расположения. Менеджер пробегается по всему массиву блоков, вызывая у каждого незакрытого блока (кроме активного) переход в состояние "закрытый" и смещает его в новое упорядоченное положение. Вот и всё. |
спасибо большое! очень Вам благодарен !
|
Здесь Мейн можно рассматривать как контейнер для блоков, он же менеджер. Надо только вычленить из него загрузчик данных, и тогда можно этот контейнер с блоками добавлять на сцену и убирать с нее. Возможно надо будет также подкрутить init(), чтобы блоки не создавались заново при добавлении контейнера на сцену. Хотя отписки от ADDED_TO_STAGE должно хватить).
В классе ИнфоБлок также остались ненужные фичи - диспатч событий и константы типов для этих событий. Это как раз для варианта с встроенной обработкой нажатия на блок. Блок должен был бы закрыться/раскрыться и послать соответствующее событие. На это событие должен был быть подписан менеджер, и он произвел бы нужные действия. В результате я сделал проще, вынеся всю логику в менеджер и "ужесточив" контроль над "детьми". |
Кстати, интересно как сделать аккордеон, в котором возможны несколько параллельных анимаций (несколько закрываются, одно открывается) и при этом всё по целым пикселям. Кому-нибудь приходилось делать?
|
то есть я правильно понимаю, что ADDED_TO_STAGE из DisplayObject отвечает за то что контэйнер виден или не виден при нажатии!?
|
Нет.
ADDED_TO_STAGE это Событие, которое DO отправляет, когда его помещают в Список Отображения (Display List). События ни за что не "отвечают". Они только информируют. |
а ещё, можно спросить!? )
если я хочу добавить в контэйнер кнопку то мне надо её определять в InfoBlock её координаты но если её там определять а функция, которая вызывается находится в Main или правильно определить в Main саму кнопку!? |
Я бы, наверное, повесил слушатель на кнопку в ИнфоБлоке, но посылал из него событие "кнопку нажали", а при создании ИнфоБлока подписывал Мейн на это событие от него. То есть вариант с промежуточной ловлей и пересылкой.
кнопка › Событие CLICK › InfoBlock#clickHandler › Событие MY_BUTTON_CLICKED › Main#InfoBlockButtonClickHandler |
Снова здравствуйте!
Хотел спросить, вот у меня получается так, я вывожу на экран раздвижные блоки. А потом мне надо их убрать. Этого не происходит и получается только накладывание друг на друга...(( Где мой касяк? ( Никак не могу разобраться... Подскажите плиз... |
removeChildAt() уже пробовали?
|
Пробовал, removeChild ... Проблема в том что я не знаю, куда именно его нужно поместить ( Так как, если я пишу в функции, где вызываю, то у меня сразу удаляются блоки, а если в другой, то выдает ошибку, потому что не может найти, что я его вызываю...
=( Вот так вот =( |
Так вы же вроде и хотели удалить блоки? Ничего не понял. Какие блоки удаляются, а какие добавляются?
|
Прости за непонятное объяснение( Суть вот в чем:
1.при нажатии на кнопку выходит дисплейный объект-контейнер из xml файла 2.при нажатии на другую кнопку (вне контейнера) дисплейный объект-контейнер пропадает а то у меня сейчас накладывается друг на друга. вот так вот как-то =) Надеюсь так грамотнее объяснил) |
ну так а что мешает по нажатию на вторю кнопку запустить процесс обратный нажатию на первую?
Чым тэбе породыв - тым и вбью! (с) Тарас Бульба. |
Проблема в том что, при нажатии на другую кнопку я уже очищаю сцену removeChildAt, но убирается все кроме именно блоков (контейнер) если я добавляю везде removeChild(BlockContainer), то ничего не работает((
Но и ошибок не выдает( В чем тут может быть проблема? |
Мощнейшая вспышка на Солнце заблокировала мой телепатический канал к вашему жесткому диску. Код покажите как создаете и как удаляете.
У Вас на блоках слушатели не стоят? Вы их удалять не забываете предварительно? |
Код AS3:
Здесь происходи вызов InfoBlock. |
Так здесь то понятно , что работает. А удаляете чем? Можно код кнопки?
Запустите по нажатию кнопки такую процедуру Код AS3:
|
В моем коде ссылка на blocksContainer есть только в хендлере загрузки XML. Естественно, что Вы не сможете достучаться до него. Вынесите эту ссылку в поле класса
Код AS3:
И когда надо убрать контейнер с блоками со сцены, в хендлере кнопки удаления пишете просто Код AS3:
|
Спасибо огромное!!! =) Теперь все наконец-то заработало)) слепой я просто не много видать =))
Все похоже делал, немного ошибся просто)) Добавлено через 17 часов 12 минут Вот я сделал =) так =) Код AS1/AS2:
а потом все блокируются... И я вновь не знаю в чем дело =( |
| Часовой пояс GMT +4, время: 08:39. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.