PDA

Просмотр полной версии : вывести процент пройденного расстояния слайдера startDrag


Dr_Bra
30.07.2010, 19:01
Всем привет, помогите разобраться:

Есть прямоугольник по которому можно таскать слайдер, есть текстовое поле в которое необходимо помещать процент, в зависимости на сколько слайдер перемещен.
То есть начальная точка 0% слайдер стоит в левом крае прямоугольника, как только мы начали слайдер тащить к правой части прямоугольника проценты начали увеличиваться, слайдер уперся в правый край прямоугольника, показываем 100%.

Вот такой код я использую:

stop();

var _bounds=new Rectangle(skrollLine_mc.x, skrollLine_mc.y, 152, 0);

sliderBTN_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag)
function drag(evt:MouseEvent):void
{
sliderBTN_mc.startDrag(false, _bounds);
}

stage.addEventListener(MouseEvent.MOUSE_UP, dragSTOP)
function dragSTOP(evt:MouseEvent):void
{
sliderBTN_mc.stopDrag();
}

sliderBTN_mc.dinamyc_txt.text = "кол-во %";

Хемуль
30.07.2010, 19:02
2 Dr_Bra:
А где у sliderBTN_mc точка регистрации?

Wolsh
30.07.2010, 19:06
Просто использовать обычный драг здесь, простите, неуместно. Надо слушать MOUSE_MOVE после нажатия на движок и таскать его за мышью в обработчике. В этом же обработчике вы будете знать координаты и соотвественно проценты. Имхо, драг это из "дизайнерского" наследия, наподобие Буттона.

Хемуль
30.07.2010, 19:11
2 Wolsh:
Так ведь можно и использовать startDrag, и слушать MOUSE_MOVE, и получать координаты.

Dr_Bra
30.07.2010, 19:13
вот так получается показывать от 20 до 127

sliderBTN_mc.addEventListener(Event.ENTER_FRAME, showPercent);
function showPercent(evt:Event):void
{
sliderBTN_mc.dinamyc_txt.text = sliderBTN_mc.x;
}

Хемуль
30.07.2010, 19:17
2 Dr_Bra:
Может просто задействуете стандартный компонент и заскинуете его в соответствии с задачей?

Dr_Bra
30.07.2010, 19:22
стандартный компонент – не спортивно ) решение должно быть!

Хемуль
30.07.2010, 19:25
2 Dr_Bra:
Почему "не спортивно"? Нормальный набор свойств, методов и событий.
Ну а решение есть, причём очень простое. Но если бы вы прикрепили сюда FLA-файл версии CS3 со своим слайдером, вам бы скорее помогли.

Dr_Bra
30.07.2010, 19:41
исходник выложил, посттарадся сохранить в cs3 http://***********/18719003

veisss
30.07.2010, 20:09
может так
var percent:Number = (sliderBTN_mc.x - 20) / (127-20);

Хемуль
30.07.2010, 20:11
2 Dr_Bra:
Что-то типа:

stop();

sliderBTN_mc.x = skrollLine_mc.x;
sliderBTN_mc.y = skrollLine_mc.y;

var _bounds:Rectangle = new Rectangle(skrollLine_mc.x, skrollLine_mc.y, skrollLine_mc.width - sliderBTN_mc.handle_btn.width, 0);

sliderBTN_mc.handle_btn.addEventListener(MouseEvent.MOUSE_DOWN, onThumbMouseDown);
function onThumbMouseDown(event:MouseEvent):void
{
sliderBTN_mc.startDrag(false, _bounds);
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag);
}

function drag(event:MouseEvent):void
{
sliderBTN_mc.dinamyc_txt.text = Math.round(100 * (sliderBTN_mc.x - _bounds.x) / _bounds.width) + "%";
}

stage.addEventListener(MouseEvent.MOUSE_UP, onThumbMouseUp);
function onThumbMouseUp(event:MouseEvent):void
{
sliderBTN_mc.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}

Изменения:
- У handle_btn точка регистрации в верхнем левом углу.
- У handle_btn на кадре up состояния такой же прямоугольник, как на hit, только полностью прозрачный.

Только вы там таймер на 30-м кадре запускаете на 5 повторов. Это нормально.

Dr_Bra
30.07.2010, 20:17
Спасибо за помощь, Хемуль!

Добавлено через 18 часов 49 минут
а что касается таймера, я считал что в скобках первое число –миллисекунды, а второе их колличество (1000, 10) значит десять секунд