2013-03-04 78 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如何将秒转换为小时,分钟和秒。

我知道它已经超过一年,因为这个问题被张贴,但帮我的扩展,我认为这可能是帮助别人谁具有相同的挑战

相关问题