Слайдер ActionScript 3.0 не продолжает работу, когда начинается слайд - PullRequest
0 голосов
/ 12 марта 2011

Я сделал слайдер для поиска по своему 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);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 марта 2011

Я на самом деле исправил свою проблему, вот решение.

stage.addEventListener(MouseEvent.MOUSE_MOVE, fl_Drag);

function fl_Drag(event:MouseEvent):void
{
    if(isDraging == true) {
        if(SearchBarSlider.x - (SearchBar.x + 3) < 1){
        } else 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);
        }
    }
}

Проблема заключалась в том, что когда событие gotoAndStop регистрировалось в кадре 1, вся программа перезапускалась, потому что в кадре 1 уровень действий повторно запускает код. Таким образом, сопротивление, которое было занято, закончилось. С новым фрагментом кода панель поиска не будет выполнять gotoAndStop (1);

0 голосов
/ 12 марта 2011

Вторая функция действительно не возникает при перетаскивании?Вы удаляете его или он работает одновременно?Я думаю, что ваша функция enter_frame и функция mouse_move борются друг с другом.в вашей функции перетаскивания добавьте:

stage.removeEventListener(Event.ENTER_FRAME, fl_frameEvent);

и в вашей функции перетаскивания добавьте:

stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);

Еще один обходной путь, я заметил, что если вы приблизите слайдер,Пройдите 99,9% от оставленного пути, но не совсем выровняйте его, он работает как положено, так что вы можете просто настроить перетаскиваемый прямоугольник, чтобы оставить только крошечное пространство с левой стороны.

SearchBar.x + 4
...