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

Futury 02.04.2008 18:25

Скроллинг колёсиком мыши
 
Привет!
Подскажите что нужно дописать для прокрутки колёсиком

Код:

Stage.scaleMode = "noScale";
_root._quality = "BEST";
//
//Сегодня мы разберём один из видов скроллинга во Flash. Это будет скроллинг не
//для текстовых полей (TextField), а для Movie Clip'ов, внутри которых может быть
//любое содержимое.
//Принцип таков:
//1) На объект, который нужно будет прокручивать накладывается маска.
//2) Объект, который мы "скроллируем" (прокручиваем) сдвигается по оси Y, если
//это вертикальный скроллинг, или по оси X, если это горизонтальный скроллинг.
//Таким образом, при движении, будет определённая часть обхекта будет открываться,
//а определённая скрываться. Та, что будет находится "под" маской, будет видна,
//та что будет выходить за пределы маски, будет скрыта.
//
//Накладываем маску на объект.
obj_mc.setMask(mask_mc);
//Находим разницу между общей высотой обхекта и высотой "видимой части", видимая
//часть у нас будет составлять площадь маски, и, соответственно, высота видимой
//части - это будет высота маски.
var varDif:Number = obj_mc._height-mask_mc._height;
//Создаём событие на нажатие кнопки скроллинга
scroll_mc.onPress = function() {
        //Переходим во второй кадр скроллинга, чтобы сделать нажатие наглядней
        this.gotoAndStop(2);
        //Начинаем перетаскивание кнопки скроллинга
        //startDrag(lockCenter,left,top,right,bottom);
        //lockCenter - может принимать значения true или false, если lockCenter равен
        //true, то центр перетаскиваемого объекта всегда совпадать с курсором мышки.
        //Если false, то происходит обычное перетаскиавание, куда мышкой клацнули,
        //за то место и потянули.
        //left - координата левой границы, за которую объект выходить не будет;
        //top - координата верхней границы;
        //right - координата правой границы;
        //bottom - координата нижней границы.
        //Если вы хотите, что объект можно было перетаскивать безо всяких ограничений,
        //то можете просто не заполнять эти параметры. Если вам нужно, чтобы по
        //вертикали объект нельзя было передвигать, то значения top и bottom должны
        //быть одинаковыми. Если хотите, чтобы обхект нельзя было перетаскивать по
        //горизонтали, то left и right должны быть равны друг другу.
        //Кстати все эти параметры являются не обязательными, то есть, вы можете
        //просто записать startDrag() и перетаскивание объекта всёравно включится,
        //и никаких ограничений к этому перетаскиванию применено не будет.
        this.startDrag(false, this._x, 0, this._x, 150);
        //Создаём событие на ДВИЖЕНИЕ МЫШКИ.
        this.onMouseMove = function() {
                //Пропорционально тому, на сколько скроллинг сместился ниже начала оси Y
                //объект, который мы прокручиваем, должен смещаться вверх.
                _root.obj_mc._y = -_root.varDif*(this._y/150);
        };
};
//После того, как пользователь отпустил кнопку мышки, мы должны остановить
//прокручивание.
scroll_mc.onRelease = scroll_mc.onReleaseOutside=function () {
        //Переходим на первый кадр скроллинга.
        this.gotoAndStop(1);
        //Останавливаем перетаскивание скроллинга
        this.stopDrag();
        //Удаляем событие на ДВИЖЕНИЕ МЫШКИ, с помощью которого и происходило
        //прокручивание объекта.
        delete this.onMouseMove;
};


Dzhav 02.04.2008 20:00

Есть такое событие, "onMouseWheel" называется. Примерчик:
Код:

var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(varDelta:Number) {
        trace("Движение колёсика "+varDelta);
};
Mouse.addListener(mouseListener);


Futury 03.04.2008 11:30

А вместо трейса что вписывать?

Dzhav 03.04.2008 13:10

Разбиратся в вашем скрипте мне не хочется, но принцип работы должен бить такой:
Код:

mouseListener.onMouseWheel = function(varDelta:Number) {
        obj_mc._y += varDelta*5;
        scroll_mc._y -= varDelta*5;                               
        };

где varDelta - переменная, кратная 3 (3, 6, 9,...), которая изменяется при прокрутке скролла мышки

Futury 03.04.2008 14:34

Чё то не пойму где именно его вставлять нужно(((

Dzhav 03.04.2008 15:33

Что же ты ленивый такой?!
Код:

Stage.scaleMode = "noScale";
_root._quality = "BEST";
stop();
obj_mc.setMask(mask_mc);
varDif = obj_mc._height-mask_mc._height;
scroll_mc.onPress = function() {
        this.gotoAndStop(2);
        this.startDrag(false, this._x, 0, this._x, 150);
        this.onMouseMove = function() {               
                _root.obj_mc._y = -_root.varDif*(this._y/150);
        };
};
scroll_mc.onRelease = scroll_mc.onReleaseOutside=function () {
        this.gotoAndStop(1);
        this.stopDrag();
        delete this.onMouseMove;
};
var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(varDelta:Number) {
        _root.obj_mc._y += varDelta*5;
        _root.scroll_mc._y -= varDelta*5;       
};
Mouse.addListener(mouseListener);


Futury 03.04.2008 16:22

Большое спасибо!.......только вот....при прокручивании колеса скролл уходит за заданные приделы....((

Obi 03.04.2008 17:13

Ну ставьте проверку на заданные пределы, и скрольте объект, только если он находится в заданой области.

Dzhav 03.04.2008 17:19

Поставь в функцию "onMouseWheel" ограничения, которые не давали бы клипу изменять свое положение, если его значение _y больше 0 или меньше за -varDif


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

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