Показать сообщение отдельно
Старый 19.03.2011, 16:16
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Решение состоит не в том, чтобы при отпускании ползунка (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. Исходник вашего пример у меня не открылся, но на самом деле тут мне проще свое накидать для объяснения.

Сам пример во вложении:
Вложения
Тип файла: rar scroller.rar (8.3 Кб, 61 просмотров)
__________________
Идите первым!


Последний раз редактировалось mooncar; 19.03.2011 в 17:04.