Я сделал слайдер для поиска по своему ActionScript видео.
Может быть, вы поймете лучше, если увидите, над чем я работаю:
http://www.stevevo.sin.khk.be/Website%202SDesign/ -> это ссылка на тестовый сервер, на котором работает сайт, на котором я работаю. Вы увидите огромный баннер в центре, переверните его, увидите слайдер и кнопку паузы / запуска.
Слайдер отлично работает, за исключением 1 мелочи. Когда вы перетаскиваете ползунок в крайнее левое положение, ActionScript 3.0 снова запустит фильм (я полагаю), теперь перетаскивайте вправо без перерывов, и ползунок не будет перемещаться вправо, как он должен (все одним движением).
Почему невозможно сначала сдвинуться к началу, а затем продолжить скольжение?
МОЙ КОД:
очень просто. Вы начинаете перетаскивать, прямоугольник - это dragRestriction. Фильм останавливается. isDragging = true.
SearchBarSlider.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);
function fl_ClickToDrag(event:MouseEvent):void
{
var rect:Rectangle = new Rectangle(SearchBar.x + 3,
SearchBar.y,
SearchBar.width - 10,
0);
SearchBarSlider.startDrag(false, rect);
stop();
isDraging = true;
}
Опять легкий горох. Перетаскивание останавливается. Фильм начинает играть снова. isdragging = false;
stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);
function fl_ReleaseToDrop(event:MouseEvent):void
{
SearchBarSlider.stopDrag();
play();
isDraging = false;
}
Когда мышь перемещается при перетаскивании, ползунок x будет преобразован в нужное количество кадров. Между 3 частями применяются другие длины.
stage.addEventListener(MouseEvent.MOUSE_MOVE, fl_Drag);
function fl_Drag(event:MouseEvent):void
{
if(isDraging == true) {
if(SearchBarSlider.x - (SearchBar.x + 3) < 20){
gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3)) / 20) * 320));
} else if(SearchBarSlider.x - SearchBar.x + 3 >= 20 && SearchBarSlider.x - SearchBar.x + 3 < 40){
gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 20) / 20) * 365) + 365);
} else {
gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 40) / 20) * 465) + 685);
}
}
}
Это событие происходит в каждом кадре, когда он не перетаскивается. Но вместо преобразования x-позиции ползунка в кадры это преобразует кадры в x-положение ползунка.
stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);
function fl_frameEvent(e:Event):void
{
if(isDraging == false) {
if(currentFrame < 365){
SearchBarSlider.x = SearchBar.x + 3 + Math.round((currentFrame / 365) * 20);
} else if(currentFrame >= 365 && currentFrame < 685){
SearchBarSlider.x = SearchBar.x + 23 + Math.round(((currentFrame - 365) / 320) * 20);
} else {
SearchBarSlider.x = SearchBar.x + 43 + Math.round(((currentFrame - 685) / 465) * 20);
}
}
}