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

Nickolai 07.11.2012 19:05

Полоса прокрутки
 
Всем доброго вечера. У меня такой вопрос: как сделать во флэше полосу прокрутки. Скажем у меня есть приложение размером 800 на 600 пх, но у меня есть контент размером 800 на 1000 пх как мне сделать так чтобы если размер контента больше размера приложения то появлялась полоса прокрутки? Буду очень признателен.

Hauts 07.11.2012 19:16

Решения "в лоб":

1. Кладем весь контент в спрайт и прогаем поведение скроллбара в приложении.

2. Ищем в гугле уже готовые скроллбары, разбираемся с тем, как они работают, выбираем подходящий и используем его.

in4core 07.11.2012 20:43

Ничего искать не надо, у меня отличный скроллер берем :) На данный момент учитывает ВСЕ пожелания - mouseWheel тоже )))

Код AS3:

package com.in4core.navigation 
{
        import com.greensock.TweenMax;
        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
        import flash.display.Sprite;
        import flash.errors.IllegalOperationError;
        import flash.events.MouseEvent;
        import flash.geom.Rectangle;
        import flash.text.TextField;
        /**
        * ...
        * @author in4core
        * Display or Text Object Scroller
        * use addScroll methods to define Scroller
        * Version 1.0
        */

        public final class UIScrollBar
        {       
                //-----------------DisplayObjectInit-----------//
                /*objects*/
                private var _scroll:Sprite;
                private var _maskHeight:int;
                private var _content:DisplayObjectContainer;
                private var _rect:Rectangle;
 
                /*coords*/
                private var _startYScroll:int;
                private var _startYContent:int;
                private var _wayOfScroll:int;
 
                //-----------------TextFieldInit-----------//
 
                /*objects*/
                private var _tscroll:Sprite;
                private var _tf:TextField;
                private var _trect:Rectangle;
 
                /*coords*/
                private var _wayOfTextScroll:int;
                private var _delta:int;
 
                /////////////////////////////////////////////////////////////////////
                //!4
                //!  4                      PUBLIC
                //!    4                                                         
                /////////////////////////////////////////////////////////////////////
 
                public function addScrollObject( scroll:Sprite,maskHeight:int,content:DisplayObjectContainer,way:int ):void {
 
                        this._scroll = scroll;
                        this._maskHeight = maskHeight;
                        this._content = content;
                        this._wayOfScroll = way;
                        this._startYScroll = _scroll.y;
                        this._startYContent = _content.y;
                        this._rect = new Rectangle(_scroll.x, _scroll.y, 0, _wayOfScroll);
 
                        /*events*/
                        if (!_scroll.stage) throw new IllegalOperationError ( ' Before add Scroll - add you Scroll on DisplayList by addChild ');
 
                        _scroll.addEventListener(MouseEvent.MOUSE_DOWN, dragStart);
                        _scroll.stage.addEventListener(MouseEvent.MOUSE_UP, dragStop);
 
                        //trace( 'UIScrollBar-Display : INIT' );
                }
 
                public function addScrollText( tf:TextField , scroll:Sprite , way:int ):void {
 
                        this._tscroll = scroll;
                        this._tf = tf;
                        this._wayOfTextScroll = way;
                        this._trect = new Rectangle(_tscroll.x, _tscroll.y, 0, _wayOfTextScroll);
 
                        /*events*/
                        if (!_tscroll.stage) throw new IllegalOperationError ( ' Before add Scroll - add you Scroll on DisplayList by addChild ');
 
                        _tscroll.addEventListener(MouseEvent.MOUSE_DOWN , tdragStart);
                        _tscroll.stage.addEventListener(MouseEvent.MOUSE_UP , tdragStop);
 
                        //trace( 'UIScrollBar-Text : INIT' );
                }
 
                public function destroy():void {
 
                        if (_scroll != null ) {
 
                                _scroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE, updatePosition);
                                _scroll.removeEventListener(MouseEvent.MOUSE_DOWN, dragStart);
                                _scroll.stage.removeEventListener(MouseEvent.MOUSE_UP, dragStop);
                                _scroll.stage.removeEventListener(MouseEvent.MOUSE_WHEEL , onWheel);
                        }
 
                        if (_tscroll != null ) {
 
                                _tscroll.removeEventListener(MouseEvent.MOUSE_DOWN , tdragStart);
                                _tscroll.stage.removeEventListener(MouseEvent.MOUSE_UP , tdragStop);
                                _tscroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE ,updateTextPosition);
                        }
 
                        TweenMax.killTweensOf(_content);
 
                }
                /////////////////////////////////////////////////////////////////////
                //!4
                //!  4                      PRIVATE
                //!    4                                                         
                /////////////////////////////////////////////////////////////////////
                private function tdragStart(e:MouseEvent):void {
 
                        _tscroll.startDrag(false, _trect);
                        _tscroll.stage.addEventListener(MouseEvent.MOUSE_MOVE ,updateTextPosition);
                }
 
                private function tdragStop(e:MouseEvent):void {
 
                        _tscroll.stopDrag();
                        _tscroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE ,updateTextPosition);
                }
 
                private function dragStart(e:MouseEvent):void {
 
                        _scroll.startDrag(false, _rect);
                        _scroll.stage.addEventListener(MouseEvent.MOUSE_MOVE, updatePosition);
 
                }
 
                private function dragStop(e:MouseEvent):void {
 
                        _scroll.stopDrag();
                        _scroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE, updatePosition);
                }
 
                public function updatePosition (e:MouseEvent):void {
 
                        if (_maskHeight < _content.height)
                        {
                                var yy:int = _startYContent - ( (_content.height - _maskHeight) / _wayOfScroll ) * ( _scroll.y - _startYScroll );
 
                                TweenMax.to(_content , 1 , { y:yy } );
                        }
                }
 
                private function updateTextPosition(e:MouseEvent):void {
 
                        _tf.scrollV = Math.round(((_tscroll.y - _trect.y) / _wayOfTextScroll ) * _tf.maxScrollV);
                }
 
                public function trueScroll():Boolean {
 
                        if (_maskHeight < _content.height) return true;
                        return false;
                }
 
                public function useWheel(delta:int = 4):void
                {
                        _delta = delta;
                        _scroll.stage.addEventListener(MouseEvent.MOUSE_WHEEL , onWheel);
                }
 
                private function onWheel(e:MouseEvent):void
                {
                        _scroll.y = _scroll.y - e.delta * _delta;
 
                        if (_scroll.y < _startYScroll) _scroll.y = _startYScroll;
                        else if (_scroll.y > _wayOfScroll + _startYScroll) _scroll.y = _wayOfScroll + _startYScroll;
 
                        updatePosition(null);
                }
 
        }
 
}


dimarik 07.11.2012 21:01

Код AS3:

if (!_scroll.stage) throw new IllegalOperationError ( ' Before add Scroll - add you Scroll on DisplayList by addChild ');

Честно говоря, я боюсь смотреть остальное из пакета com.in4core

Wolsh 07.11.2012 21:01

Последний написанный мной скроллер вообще ничего не знал о скроллируемом объекте, что позволяло использовать его в любой ситуации — для текста, для таргета под маской, для таргета со скроллРектом.. Удобно, но требует дополнительного кода вне скроллера. Зато в этом то и свобода))) ООП, чтоб его..

in4core 07.11.2012 21:03

Код AS3:

if (!_scroll.stage) throw new IllegalOperationError ( ' Before add Scroll - add you Scroll on DisplayList by addChild ');

Не боись, мне просто лень почему то было аддед ту стейдж делать раньше, ясное дело мой косяк, глуп был зелен))) Так что, это стоит заменить, в блоге я об этом указал

Wolsh 07.11.2012 21:06

Мне не так страшно получить IllegalOperationError, как прочитать текст этой ошибки: "Before add Scroll - add you Scroll".....

in4core 07.11.2012 21:28

Цитата:

Мне не так страшно получить IllegalOperationError, как прочитать текст этой ошибки: "Before add Scroll - add you Scroll".....
текст тоже гениален я понимаю))) Но к теме это не относится, это холивар уже, решение, причем работающее и хорошее - я дал


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

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