2011-03-12 60 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