Actionscript 3 滑动开始时,ActionScript 3.0滑块不会继续

Actionscript 3 滑动开始时,ActionScript 3.0滑块不会继续,actionscript-3,slider,flash-cs5,movie,Actionscript 3,Slider,Flash Cs5,Movie,我制作了一个滑块来搜索我的actionscript视频。 如果你能看到我在做什么,也许你会理解得更好: ->这是运行我正在构建的网站的testserver的链接。你会看到中央的巨大横幅,滚动它,你会看到一个滑块和一个暂停/开始按钮。 滑块非常适用于一件小事。当你将滑块拖动到最左边时,actionScript 3.0将再次启动电影,现在将滑块拖动到右边而不中断,滑块不会向右移动,因为他应该一次拖动 为什么不可能先滑到起点,然后再继续滑 我的代码: 很简单。开始拖动时,矩形即为拖动限制。电影停了。I

我制作了一个滑块来搜索我的actionscript视频。 如果你能看到我在做什么,也许你会理解得更好: ->这是运行我正在构建的网站的testserver的链接。你会看到中央的巨大横幅,滚动它,你会看到一个滑块和一个暂停/开始按钮。 滑块非常适用于一件小事。当你将滑块拖动到最左边时,actionScript 3.0将再次启动电影,现在将滑块拖动到右边而不中断,滑块不会向右移动,因为他应该一次拖动

为什么不可能先滑到起点,然后再继续滑

我的代码:

很简单。开始拖动时,矩形即为拖动限制。电影停了。IsDraging=正确

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;
}
再简单一点。阻力停止。电影又开始播放了。IsDraging=错误

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event:MouseEvent):void
{
    SearchBarSlider.stopDrag();
    play();
    isDraging = false;
}
当鼠标拖动时移动,滑块的x位置将转换为正确的帧数。在这三个部分之间,其他的长度是相同的

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);
        }
    }
}

拖动时,第二个功能真的没有出现吗?您是将其删除,还是同时运行?我认为你的输入框功能和你的鼠标移动功能在互相争斗。在拖动功能中添加以下内容:

stage.removeEventListener(Event.ENTER_FRAME, fl_frameEvent);
stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);
在drop函数中添加以下内容:

stage.removeEventListener(Event.ENTER_FRAME, fl_frameEvent);
stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);
另一个解决方法,我注意到如果你在滑块上放大方向,如果你向左走了99.9%,但不完全对齐,它会像预期的那样工作,所以你可以调整你的可拖动矩形,在左侧只留下一个很小的空间

SearchBar.x + 4

实际上我解决了自己的问题,这是解决办法

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帧,操作层重新初始化代码。所以忙碌的日子结束了。有了新的代码,搜索栏将不会执行gotoAndStop1

嗨,好主意,但这不是问题所在。我试过了,但没有成功。检查我自己的答案,因为我找到了解决我自己问题的方法:D