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

palsany4 26.05.2010 14:17

проблема скролинга с помощью колеса
 
после нескольких прокрутов ползунок (scrol_mc) начинает безумствовать, шаг получается уже не 9 а гораздо больше. Сперва всю полосу можно было за 17 движение колеса, потом стает за 7, потом вообще за 3... В чем ошибка, не понимаю...
спасибо.
Код AS1/AS2:

var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function (wheel) {
        if (wheel < 0) {
                if (scrol_mc._y <= 576) {
                        scrol_mc._y = scrol_mc._y + 9;}
}
 
        else {               
                if (scrol_mc._y >= 9) {
                        scrol_mc._y = scrol_mc._y - 9;}
        }
};
Mouse.addListener(mouseListener);
if (scrol_mc._y > 576) { scrol_mc._y = 576};
if (scrol_mc._y < 9) { scrol_mc._y = 9};


udaaff 26.05.2010 14:32

Проверил ваш код. Никакого безумства не заметил. Единственное что, упростил бы слегка:
Код AS1/AS2:

var speed:Number = 3;
var minY:Number = 9;
var maxY:Number = 576;
 
Mouse.addListener(this);
scroll_mc._y = truncate(minY, maxY, scrol_mc._y);
 
function onMouseWheel(delta):Void
{
        scroll_mc._y = truncate(minY, maxY, scroll_mc._y + speed * delta);
}
 
function truncate(min:Number, max:Number, n:Number):Number
{
        return Math.max(min, Math.min(max, n));
}


iNils 26.05.2010 14:46

Я так подозреваю, что вы пишите на таймлайне и в кадр с кодом заходите несколько раз, тогда каждый заход подписывает вас еще раз на событие от колесика мыши. И на одно движение приходится несколько вызовов обработчика события.
Код AS1/AS2:

var step:Number = 9;
var topLimit:Number = 9;
var bottomLimit:Number = 576;
this.onMouseWheel = function (wheel:Number) {
        trace ("q")
        if (wheel < 0) {
                if (scrol_mc._y < bottomLimit) {
                        scrol_mc._y += step;
                } else if (scrol_mc._y > bottomLimit) {
                        scrol_mc._y = bottomLimit
                }
        } else {
                if (scrol_mc._y > topLimit) {
                        scrol_mc._y -= step;
                } else if (scrol_mc._y < topLimit) {
                        scrol_mc._y = topLimit
                }
        }
};
Mouse.addListener (this);


palsany4 26.05.2010 15:04

to udaaff, код красивый, но не работает
to iNils, stop (); в начале кода - проблема решена. Спасибо!

udaaff 26.05.2010 15:19

palsany4, scroll потому что с двумя l, потому и не работает.

palsany4 26.05.2010 15:58

действительно, не заметил. Все класс! Какой проницательный контингент форума, чудо!


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

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