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

KA4MAN 19.03.2011 02:04

Скроллинг со слайдером останавливающийся на позициях
 
Вложений: 2
Здравствуйте!
Помогите пожалуйста со скроллингом!

Сделал скроллинг со слайдером проматывающим 3 изображения, и требуется сделать так,
чтобы при отпускании слайдер (и соответственно прокручиваемый контент) останавливался в ближайшей
из 3-х позиций... (возможно плавно останавливаясь =) )

Никак не могу найти как это сделать.. прикрепил исходник - буду очень признателен за помощь!

mooncar 19.03.2011 16:16

Вложений: 1
Решение состоит не в том, чтобы при отпускании ползунка (onRelease) проверять, к которой фиксированной позиции он ближе всего находится, а в том, чтобы вычислять саму эту позицию, и устанавливать туда скроллер.

Допустим три позции ползунка имеют координаты 0, 300, 600 (то есть шаг = 300).
Тогда примерно так:

Код AS1/AS2:

import mx.transitions.Tween;
 
scroller.onPress = function  ()
{
        this.startDrag(false, 0, this._y, 600, this._y);
};
 
scroller.onRelease = scroller.onReleaseOutside = function()
{
        this.stopDrag();
        var pos:Number = Math.round(this._x / 300); //получаем ближайший номер позиции
        var setX:Number = pos * 300;
        var myTween:Tween = new Tween(this, '_x', mx.transitions.easing.Strong.easeOut, this._x, setX, 0.5, true);
};

Разумеется, насчет драга у вас реализация может быть иная, в этом примере вам главным образом нужно смотреть на вычисление и установку координаты ползунка при отпускании.
Для плавной (равнозамедленной) установки ползунка в полученную позицию используем класс Tween и тип easing'а - Strong.easeOut.
О них можно почитать в хелпе.

PS. Исходник вашего пример у меня не открылся, но на самом деле тут мне проще свое накидать для объяснения.

Сам пример во вложении:

KA4MAN 19.03.2011 18:30

Вложений: 1
mooncar, cпасибо большое, как раз то что нужно! :)

Мне бы ещё привязать прокручивающийся контент к этим остановкам,
а то он цепляется только в момент Drag'a за слайдер..

Я подставил свои значения, drag практически также сделан, вот мой код:
Код AS1/AS2:

Stage.scaleMode = "noScale";
_root._quality = "BEST";
import mx.transitions.Tween;
 
obj_mc.setMask(mask_mc);
var varDif:Number = obj_mc._width-mask_mc._width;
 
scroll_mc.onPress = function() {       
        this.gotoAndStop(2);       
        this.startDrag(false, 53, this._y, 595, this._y);       
        this.onMouseMove = function() {               
                _root.tempX = -_root.varDif*(this._x/550)+160;               
                speed = 0.7;
                setInterval(smoothscroll, 100);
                function smoothscroll() {
                if (_root.obj_mc._x <> _root.tempX) {
                _root.obj_mc._x = speed*obj_mc._x+(1-speed)*_root.tempX;
                }
                }
        };
};
 
scroll_mc.onRelease = scroll_mc.onReleaseOutside=function () {       
        this.gotoAndStop(1);       
        this.stopDrag();       
        delete this.onMouseMove;       
        var pos:Number = Math.round(this._x / 271);
        var setX:Number = pos * 271+53;
        var myTween:Tween = new Tween(this, '_x', mx.transitions.easing.Strong.easeOut, this._x, setX, 0.5, true);
 
};

На всякий случай прикрепил исходник и swf'ку

mooncar 19.03.2011 19:46

Можете пересохранить для CS3?

KA4MAN 19.03.2011 20:24

Вложений: 1
Конечно, вот!

Мне бы ещё сделать чтобы он сам начинал прокручиваться по позициям при простое =)))
Как привязать к таймеру я умею, а вот само движение не понимаю как создать...)

mooncar 20.03.2011 20:56

Не разобрались еще? в чем текущая трудность, если что, поподробнее?

KA4MAN 21.03.2011 15:26

Вложений: 1
Нет ещё, никак.. к сожалению в AS я не силён.
Попробовал скопировать функцию останавливающую ползунок на прокручиваемый контент,
контент стал останавливаться в нужном положении, но только после отпускания и затем движения мыши!


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

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