2011-03-12 62 views
0

我制作了滑动条来搜索动画动画视频。 也许你会更好地理解,如果你能看到我的工作: http://www.stevevo.sin.khk.be/Website%202SDesign/ - >这是测试服务器的链接,我建立的网站正在运行。你会在中心看到巨大的横幅,翻转它,你会看到一个滑块和一个暂停/开始按钮。 这个滑块可以很好的解决一件小事。当您将滑块拖动到最左侧时,actionScript 3.0将再次启动电影(我asume),现在向右拖动而不会中断,并且滑块不会向右移动(所有操作都在一个拖动中)。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; 
} 

再次容易peasy。拖动停止。电影开始再次播放。 isdragging = false;

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop); 

function fl_ReleaseToDrop(event:MouseEvent):void 
{ 
    SearchBarSlider.stopDrag(); 
    play(); 
    isDraging = false; 
} 

当拖动滑块的x位置当鼠标移动时将被转换为帧的适量。在3部分之间的其他长度aply。

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

回答

0

我实际上解决了我自己的问题,这里的解决方案。

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

拖动时真的不会发生第二个函数吗?你将它移除,还是同时运行?我认为你的enter_frame函数和你的mouse_move函数是相互对抗的。在拖动的功能补充一点:

stage.removeEventListener(Event.ENTER_FRAME, fl_frameEvent); 

,并在您的下降功能补充一点:

stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent); 

另一种解决方法,我发现,如果你放大的方式方法上的滑块,如果你来的99.9%剩下的方式,但不排列,它按预期工作,所以你可以调整你的可拖动的矩形,只留下左侧的一个小空间。

SearchBar.x + 4 
+0

嗨,伟大的想法,但这不是问题。我试过了,但没有检查我自己的答案,因为我找到了解决我自己的问题的方法:D – 2011-03-14 11:00:41