Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как ограничить скролл? (http://www.flasher.ru/forum/showthread.php?t=142283)

das uberdog 17.07.2010 00:26

Как ограничить скролл?
 
Простой казалось бы вопрос, но я не могу разобраться.
При прокручивании колесиком мыши, контент муви клипа (area_mc) уезжает за границы сцены.
Нужно ограничить скролл муви клипа (area_mc) с текстом и картинками и соответственно, скролл бара (scroller_mc).
При прокручивании скрол баром все работает нормально.

Подскажите, где искать ответ?

код такой:

Код AS1/AS2:

var scrollUpper:Number = 9;
var scrollLower:Number = 375;
 
var areaLower:Number = 0;
var areaUpper:Number = -425;
 
var scrollRange:Number = scrollLower - scrollUpper;
var areaRange:Number = areaLower - areaUpper;
 
 
 
function scroll() {
        var moved:Number = scroller_mc._y - scrollUpper;
        var pctMoved:Number = moved/scrollRange;
        var areaMoved:Number = pctMoved*areaRange;
        area_mc._y = areaLower - areaMoved;
}
 
scroller_mc.onPress = function() {
        this.startDrag(false,this._x,scrollUpper,this._x,scrollLower);
        this.onMouseMove = scroll;
}
 
scroller_mc.onRelease = scroller_mc.onReleaseOutside = function() {
        this.stopDrag ();
        this.onMouseMove = null;
}
 
var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta) {
area_mc._y += delta*4;
scroller_mc._y -= delta*4;
area_mc.Slide();
  }
Mouse.addListener(mouseListener);


in4core 17.07.2010 02:01

Код AS1/AS2:

class com.AlexNavigation.scrollbarDEFENDER {
        var _S:MovieClip;//scroller
        var _M:MovieClip;//mask
        var _C:MovieClip;//content
        var _d;
        var _u;
        var top;
        var bottom;
        var left;
        var right;
        var _int;
        var _int2;
        public function scrollbarDEFENDER() {
        }
        private function scrollIt(_s, _m, _c, useButtons, btDown, btUp) {
                if (useButtons == undefined) {
                        useButtons = false;
                }
                _S = _s;
                _M = _m;
                _C = _c;
                _d = btDown;
                _u = btUp;
                top = _M._y;
                bottom = _M._y+_M._height-_S._height;
                left = _M._x;
                right = _M._x+_M._width;
                _C._y = top;
                _C._x = left;
                _S._y = top;
                _S._x = right;
 
                _S.onPress = mx.utils.Delegate.create(this, PRESS);
                _S.onMouseMove = mx.utils.Delegate.create(this, Update);
                _S.onRelease = _S.onReleaseOutside=btDown.onRelease=btUp.onRelease=btDown.onReleaseOutside=btUp.onReleaseOutside=mx.utils.Delegate.create(this, RELEASE);
                _M.onMouseMove = mx.utils.Delegate.create(this, check);
                if (useButtons) {
                        _S._visible = false;
                        //btDown.onPress = mx.utils.Delegate.create(this, dREL);
                        //btUp.onPress = mx.utils.Delegate.create(this, upREL);
                }
        }
        function RELEASE() {
                clearInterval(_int);
                _S.stopDrag();
        }
        function Update() {
                var ratio = (_C._height-_M._height)/(_M._height-_S._height);
                _C._y = ((_M._y-_S._y)*ratio)+_M._y;
        }
        function PRESS() {
                if (_M._height<_C._height) {
                        _S.startDrag(false,right,top,right,bottom);
                }
        }
        function check() {
                if (_M._height<_C._height) {
                        _S.enabled = true;
                        _d._visible = true;
                        _u._visible = true;
                } else {
                        _S.enabled = false;
                        _d._visible = false;
                        _u._visible = false;
                }
        }
 
}

к onMouseWheel сами прикрепите

das uberdog 17.07.2010 02:31

Спасибо, попробую разобраться.

А можно как то ограничить прокрутку контента (area_mc) по Y в onMouseWheel? Может так проще будет.

in4core 17.07.2010 12:54

смотрите пример. ! там все математически описано. вам нужен тока алгоритм

das uberdog 17.07.2010 17:40

То есть мой код не годиться, его не улучшить, мне взять ваш? Ваш не могу разобрать .(

rainbowrussia 17.07.2010 19:15

Если принципиально, выложите исходник (можно упрощенный, но чтобы было видно что скроллится и как) с вашим кодом, лучше в формате CS3.

das uberdog 18.07.2010 01:05

Вложений: 1
Не то что бы принципиально, а очень, очень важно...и еще, я ничего не понял из кода in4core :wacko:
Вот исходник. Нужно просто ограничить движения муви клипа по вертикали.

rainbowrussia 18.07.2010 02:15

Вложений: 1
Замените
Код AS1/AS2:

area_mc._y += delta*4;
scroller_mc._y -= delta*4;
area_mc.Slide();

на
Код AS1/AS2:

        scroller_mc._y -= delta*4;
        if (scroller_mc._y < scrollUpper) { scroller_mc._y = scrollUpper; }
        if (scroller_mc._y > scrollLower) { scroller_mc._y = scrollLower; }
        scroll();

ps. Не понял, что за .Slide() ? вроде поиск не нашел в проекте такую функцию.

das uberdog 18.07.2010 03:09

Ааа...то есть не нужно вообще трогать муви клип, можно скроллер использовать!
Спасиба! Вы очень помогли.
Я понимал что границы вроде уже есть в скроллере, но как передать их area_mc не понимал. Спасибо еще раз.

А чтоб плавно клип подъезжал, как называется функция, что искать в хелпе??

.Slide() видимо закрался во время экспериментов .)

rainbowrussia 18.07.2010 04:22

Вложений: 1
Цитата:

Сообщение от das uberdog (Сообщение 923064)
Ааа...то есть не нужно вообще трогать муви клип, можно скроллер использовать!

Можно было и трогать муви клип, но зачем, если у вас уже есть функция scroll(), которая по положению скроллера вычисляла положение контента. В таком случае целесообразно ее и использовать, ибо если она поменяется - не придется менять в двух местах.

Цитата:

Сообщение от das uberdog (Сообщение 923064)
А чтоб плавно клип подъезжал, как называется функция, что искать в хелпе??

Поищите по форуму про Tween, будут вопросы - задавайте.

upd. Ну или без Tween, примерно так как во вложении.


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

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