Форум 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=162445)

kaploson 01.08.2011 18:31

Раздвижные блоки
 
Всем доброго времени суток!
Подскажите пожалуйста новичку!

Мне надо сделать так что бы я мог информацию в виде текста помещать в блок ( ну так называемый квадрат просто ) и что бы этот блок раскрывался и складывался показывая тем самым всю и лишь часть информации!

Помогите пожалуйста как реализовать сию мысль? Я вообще не имею понятия как это сделать((

Заранее очень признателен. Извиняюсь сразу за некорректность поставленной задачи, я надеюсь более менее все поняли что мне требуется сделать.

Wolsh 01.08.2011 22:16

Например, у спрайта есть свойство scrollRect

kaploson 02.08.2011 12:10

А можно по подробнее объяснить мне процесс реализации? А то я никак не могу понять как мне заставить такую вещь после клика по ней раздвигаться и сдвигаться соответственно после нажатия на другую...

Wolsh 02.08.2011 13:01

Так... определитесь, в первом посте был простой хайдер – нажал-открылся, нажал-закрылся.
Сейчас Вы говорите о закрытии при нажатии на ДРУГОЙ блок. А это уже не хайдер, а что-то типа Аккордеона. Уточните ТЗ))

Добавлено через 7 минут
Main.as
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.text.TextFormat;
        import Hider;
/* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
\* * * * * * * * * */

        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.showDefaultContextMenu = false;
                        // entry point
                        var s:String = "Мне надо сделать так что бы я мог информацию в виде текста помещать в блок ( ну так называемый квадрат просто ) и что бы этот блок раскрывался и складывался показывая тем самым всю и лишь часть информации!";
                        var hider1:Hider = new Hider(150, 50, 250, s, new TextFormat("Arial", 12, 0x666666));
                        addChild(hider1);
                        hider1.x = 100;
                        hider1.y = 100;
                }
 
        }
 
}

Hider.as
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Rectangle;
        import flash.text.TextField;
        import flash.text.TextFormat;
 
/* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
\* * * * * * * * * */

        public class Hider extends Sprite
        {
                private var _text                :String;
                private var _format                :TextFormat;
                private var _txf                :TextField;
                private var _width                :Number;
                private var _minHeight        :Number;
                private var _maxHeight        :Number;
                private var _hided                :Boolean = true;
 
                public function Hider(width:Number, minHeight:Number, maxHeight:Number, text:String, format:TextFormat)
                {
                        _maxHeight = maxHeight;
                        _minHeight = minHeight;
                        _width = width;
                        _format = format;
                        _text = text;
                        if (stage)
                        {
                                init();
                        }
                        else
                        {
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }
                }
 
                private function init(event:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // создаем текстовое поле для контента.
                        _txf = new TextField();
                        _txf.defaultTextFormat = _format;
                        _txf.multiline = true;
                        _txf.wordWrap = true;
                        _txf.mouseEnabled = false;
                        _txf.width = _width - 20;
                        _txf.x = 10;
                        _txf.htmlText = _text;
                        _txf.height = Math.min(_maxHeight, _txf.textHeight + 4);
                        addChild(_txf);
                        // рисуем фончик, он нужен также для реакции на клик. Можно сделать его прозрачным, задав не 1 а 0 вторым параметром beginFill().
                        this.graphics.beginFill(0xEEEEEE, 1);
                        this.graphics.drawRect(0, 0, _width, this.height);
                        this.scrollRect = new Rectangle(0, 0, _width, _minHeight);
                        // начинаем слушать клик
                        this.addEventListener(MouseEvent.CLICK, clickHandler);
                }
 
                private function clickHandler(event:MouseEvent):void
                {
                        // меняем режим.
                        _hided = !_hided;
                        if (_hided)
                        {
                                // если скрытый - задаем прямоугольник отображения с минимальной высотой, иначе - с максимальной.
                                this.scrollRect = new Rectangle(0, 0, _width, _minHeight);
                        }
                        else this.scrollRect = new Rectangle(0, 0, _width, _maxHeight);
                }
        }
 
}


kaploson 02.08.2011 13:25

Мне необходимо что бы именно как аккордеон был, так вы это назвали, то есть в при нажатии на один блок он раскрывается, а потом при нажатии на другой, первый закрывается)
Извините за не правильную формулировку изначальную)

Добавлено через 20 минут
А и вот еще сама суть проблемы и ради чего я это все спросил в том, что
возник вопросик с выводом данных из БД. Сейчас вывод происходит в таблицу.. (DataGrid), а нужно сделать вывод строчный. Это связано с дизайном приложения.

Код AS3:

private function newslist(e:Event):void
            var b;
            var h=e.target.data;
            h=h.split("_");
            for (var i = 0; i < (h.length-1); i++)         
            {
                b=h[i].split(":");
 
                dp.addItem({pid:b[0], uid:b[1], Name:b[2], News:b[3], Information:b[6] , date:b[4]});
                            }         
 
            list.x=220;
            list.y=125;
            list.resizableColumns=false;
            list.setSize(500,600);         
            list.columns=["Name", "News", "Information","date"];
            list.getColumnAt(3).width=80;
            list.getColumnAt(2).width=50
            list.getColumnAt(1).width=170;
            list.getColumnAt(0).width=120;
            list.dataProvider=dp;
            list.doubleClickEnabled=true;
            list.addEventListener(ListEvent.ITEM_CLICK,goon);
            scene.addChild(list);     
 
        }

Тоесть сейчас вывод таблицей такой |Имя|Новость|Информация|дата|,
а нужно вывести в такой вид
Имя Новость Информация (какая нибудь кнопка ) дата.
По принципу раскрывающегося блока, ну то есть когда блок скрыт видно только треть информации, а при нажатии на него всю.
Ну тоесть свобода размещения и форматирования.
Подскажите пожалуйста.

вот php код:

PHP код:

while ($row mysql_fetch_array($result))
 {
        echo 
$name.":".$date.":".$information.":".$news."_";
 } 

Добавлено через 3 часа 7 минут
И извините за нубский вопрос... но я никак не пойму что именно мне сделать кодом, который вы предоставили =(
Объясните пожалуйста(

Wolsh 02.08.2011 16:32

Опять не понял(( Может на солнце пятна и телепатические способности мои пофиксились.. Как-то ваш текст трояко можно понять.. могли бы вы сварганить картинку, как примерно эти "строки" должны выглядеть закрытые и раскрытые? Я так понимаю, что "новость" и "информация" это не два-три слова, как это все долно быть размещено в блоке? Не представляю. Изобразите? Хоть в гуглдоках))

kaploson 02.08.2011 17:15

http://cs5126.vkontakte.ru/u2473597/...x_7e9b3916.jpg

Вот я накидал картинку =) Вот что-то такое мне требуется =)

Добавлено через 5 минут
А вот тут если как должно быть на самом деле, примерно конечно это просто в FS накидал =)

http://cs5126.vkontakte.ru/u2473597/...x_981e0e9e.jpg

Wolsh 03.08.2011 00:09

Вложений: 1
Вот пример, проект для FlashDevelop, не знаю каким редактором пользуетесь Вы и сможете ли переделать под Флэш ИДЕ если что.
В локальном плеере свфка (лежит в bin/) скорее всего не запустится, не сможет загрузить xml (имитирует ответ сервера)), если не добавить проект в доверенную директорию или не открыть в ФД. Разбирайтесь, удачи)))

kaploson 03.08.2011 11:12

Вообще все делаю =) Adobe Flash Professional CS5 =)
Спасибо большое =) Буду сейчас пытаться =)

Wolsh 03.08.2011 13:19

Вложений: 1
Ок. Вот для CS5.


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

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