Просмотр полной версии : Как ограничить скролл?
das uberdog
17.07.2010, 00:26
Простой казалось бы вопрос, но я не могу разобраться.
При прокручивании колесиком мыши, контент муви клипа (area_mc) уезжает за границы сцены.
Нужно ограничить скролл муви клипа (area_mc) с текстом и картинками и соответственно, скролл бара (scroller_mc).
При прокручивании скрол баром все работает нормально.
Подскажите, где искать ответ?
код такой:
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);
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? Может так проще будет.
смотрите пример. ! там все математически описано. вам нужен тока алгоритм
das uberdog
17.07.2010, 17:40
То есть мой код не годиться, его не улучшить, мне взять ваш? Ваш не могу разобрать .(
rainbowrussia
17.07.2010, 19:15
Если принципиально, выложите исходник (можно упрощенный, но чтобы было видно что скроллится и как) с вашим кодом, лучше в формате CS3.
das uberdog
18.07.2010, 01:05
Не то что бы принципиально, а очень, очень важно...и еще, я ничего не понял из кода in4core :wacko:
Вот исходник. Нужно просто ограничить движения муви клипа по вертикали.
rainbowrussia
18.07.2010, 02:15
Замените
area_mc._y += delta*4;
scroller_mc._y -= delta*4;
area_mc.Slide();
на
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
Ааа...то есть не нужно вообще трогать муви клип, можно скроллер использовать!
Можно было и трогать муви клип, но зачем, если у вас уже есть функция scroll(), которая по положению скроллера вычисляла положение контента. В таком случае целесообразно ее и использовать, ибо если она поменяется - не придется менять в двух местах.
А чтоб плавно клип подъезжал, как называется функция, что искать в хелпе??
Поищите по форуму про Tween, будут вопросы - задавайте.
upd. Ну или без Tween, примерно так как во вложении.
Если принципиально, выложите исходник (можно упрощенный, но чтобы было видно что скроллится и как) с вашим кодом, лучше в формате CS3.
А в моем случае как изменить поведение, чтобы при прокрутке колесом работала функция scrollit? Помогите плиз.
rainbowrussia
18.07.2010, 21:29
В вашем случае не вижу необходимости скроллить колесом, так как контент скроллится в зависимости от положения мыши, и как только мышь сдвинется с места - ваш скролл вернется на законное место.
У меня вопрос в том, как изменить onMove на ScrollWhell, у меня не получилось сделать этого...
wcbfalcon
08.09.2010, 14:02
Можно было и трогать муви клип, но зачем, если у вас уже есть функция scroll(), которая по положению скроллера вычисляла положение контента. В таком случае целесообразно ее и использовать, ибо если она поменяется - не придется менять в двух местах.
Поищите по форуму про Tween, будут вопросы - задавайте.
upd. Ну или без Tween, примерно так как во вложении.
Использовал вариант представленный в примере для создание скрола у себя на сайте но столкнулся с такой проблемой как (скрол колесом мыши раьботает только в ИЕ а в Опере и ФФ не работает) при этом скрол с объектом находятся в отдельной флешке загружаемой в основную флешку.
С чем это может быть связано и как решить проблему ?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.