2013-03-04 103 views
0

嗨,目前我設計玩家通過使用flex.I想顯示時間,同時mouseovering洗滌器(即HSlider)。我試過Datatip。但那是隻在我拖動該滑塊時工作,並且還嘗試使用在該滑塊中更改事件,該事件也僅通過單擊工作。Flex Hslider工具提示時間,同時鼠標懸停它

這是我的代碼:

<mx:HSlider id="slider" x="160" y="376" width="387" height="42" 
     enabled="true" 
     change="movieSeek(event)" 
     mouseDown="isScrubbing=true" 
     mouseUp="isScrubbing=false" 
     showTrackHighlight="true" 
showDataTip="true"          styleName="customHSlider" 
    useHandCursor="{fpsText.text}" 
    trackHighlightSkin="@Embed(source='assets/images/track.png')" /> 





function movieSeek(event:Event):void 
    { 
     if (nsPlay == null) return; 
     if (doPlay.styleName=="customButton") 
     { 
     nsPlay.resume(); 
     }  
     slider.toolTip = "time ="+slider.value; 
     nsPlay.seek(slider.value);    
    } 

在一些博客,我有大約mx_internal。鼠標懸停時可以獲取當前位置的值。請告訴我。

我希望它是這樣

enter image description here

回答

0

檢查在滑塊鼠標懸停事件。

+0

是鼠標懸停事件可以給解決方案,但問題是必須計算滑塊時間,同時mouseovering它 – Kalai 2013-03-04 10:35:07

1

可以創建自定義使用HSlider和聽mousemove事件時,我創建了簡單的例子,你可能會重構和優化爲自己,見代碼:

package classes 
{ 
    import flash.events.MouseEvent; 
    import flash.geom.Point; 

    import mx.controls.HSlider; 
    import mx.controls.sliderClasses.SliderDataTip; 
    import mx.core.mx_internal; 
    import mx.formatters.NumberFormatter; 

    use namespace mx_internal; 

    public class HSliderCustom extends HSlider 
    { 

     private var _rollOver:Boolean = false; 
     private var _thumbActivity:Boolean = false; 

     public function HSliderCustom() 
     { 
      super(); 
     } 

     // 
     // Handlers 
     // 

     protected function onRollOutHandler(event:MouseEvent):void 
     { 
      _rollOver = false; 

      destroyMovieHandler(); 

      if (!_thumbActivity) 
      { 
       if (mx_internal::dataTip) 
       { 
        systemManager.toolTipChildren.removeChild(mx_internal::dataTip); 
        mx_internal::dataTip = null; 
       } 
      } 
     } 

     protected function onRollOverHandler(event:MouseEvent):void 
     { 
      _rollOver = true; 

      addMovieHandler(); 
     } 

     protected function onMouseMoveHandler(event:MouseEvent):void 
     { 
      var p:Point = new Point(event.localX, event.localY); 
      var p_global:Point = event.target.localToGlobal(p); 
      var p_content:Point = globalToContent(p_global); 

      onRollOverTooltip(p_content.x, p_content.y); 
     } 

     mx_internal function addMovieHandler():void 
     { 
      if (!hasEventListener(MouseEvent.MOUSE_MOVE)) 
       addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler, false, 0, true); 
     } 

     mx_internal function destroyMovieHandler():void 
     { 
      if (hasEventListener(MouseEvent.MOUSE_MOVE)) 
      { 
       removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler); 
      } 
     } 

     // 
     // Overriden methods 
     // 

     override protected function childrenCreated():void 
     { 
      super.childrenCreated(); 

      addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler, false, 0, true); 
      addEventListener(MouseEvent.ROLL_OUT, onRollOutHandler, false, 0, true); 

     } 

     override mx_internal function onThumbMove(thumb:Object):void 
     { 
      destroyMovieHandler(); 

      _thumbActivity = true; 

      super.mx_internal::onThumbMove(thumb); 
     } 

     override mx_internal function onThumbRelease(thumb:Object):void 
     { 
      super.mx_internal::onThumbRelease(thumb); 

      if (_rollOver) 
      { 
       addMovieHandler(); 
      } 

      _thumbActivity = false; 
     } 

     // 
     // New methods 
     // 

     protected function onRollOverTooltip(localX:Number, localY:Number):void 
     { 
      if (showDataTip) 
      { 

       // Setup number formatter 
       var dataFormatter:NumberFormatter = new NumberFormatter(); 
       dataFormatter.precision = getStyle("dataTipPrecision"); 

       if (!mx_internal::dataTip) 
       { 
        mx_internal::dataTip = SliderDataTip(new sliderDataTipClass()); 
        systemManager.toolTipChildren.addChild(mx_internal::dataTip); 

        var dataTipStyleName:String = getStyle("dataTipStyleName"); 
        if (dataTipStyleName) 
        { 
         mx_internal::dataTip.styleName = dataTipStyleName; 
        } 
       } 

       var formattedVal:String; 
       if (dataTipFormatFunction != null) 
       { 
        formattedVal = this.dataTipFormatFunction(
         mx_internal::getValueFromX(localX)); 
       } 
       else 
       { 
        formattedVal = dataFormatter.format(mx_internal::getValueFromX(localX)); 
       } 

       mx_internal::dataTip.text = formattedVal; 

       mx_internal::dataTip.validateNow(); 
       mx_internal::dataTip.setActualSize(mx_internal::dataTip.getExplicitOrMeasuredWidth(),mx_internal::dataTip.getExplicitOrMeasuredHeight()); 
       //mx_internal::positionDataTip(thumb); 
      } 
      mx_internal::keyInteraction = false; 

      /* 
      var event:SliderEvent = new SliderEvent(SliderEvent.THUMB_PRESS); 
      event.value = getValueFromX(thumb.xPosition);; 
      event.thumbIndex = thumb.thumbIndex; 
      dispatchEvent(event); 
      */ 

      var o:Point = new Point(localX, localY); 
      var r:Point = localToGlobal(o); 
      r = mx_internal::dataTip.parent.globalToLocal(r); 

      mx_internal::dataTip.x = r.x < 0 ? 0 : r.x - mx_internal::dataTip.width/2; 
      mx_internal::dataTip.y = y - mx_internal::dataTip.height; 
     } 
    } 
} 
+0

感謝您的答覆伊利亞。我們已經嘗試了上面的代碼,但我有以下錯誤。調用可能未定義的方法dataTipFormatFunction調用可能未定義的方法sliderDataTipClass並訪問未定義的屬性dataTipFormatFunction。你能建議我解決這些問題 – Kalai 2013-03-05 13:10:32

+0

我使用FB 4.6。你遇到了哪些錯誤? – 2013-03-05 13:13:08

+0

我也只使用FB 4.6 – Kalai 2013-03-05 13:15:06

0

檢查dataTipFormatFunction

mySlider.dataTipFormatFunction = function(value:Number):String { 
    return formatTime(value); 
} 

private function formatTime(value:Number) { 
    return "00:00"; 
}

Here is a great example如何將秒轉換爲小時,分鐘和秒。

我知道它已經超過一年,因爲這個問題被張貼,但幫我的擴展,我認爲這可能是幫助別人誰具有相同的挑戰

相關問題