2011-03-06 30 views
0

我在我的flex应用程序中有一个基本的鼠标悬停,它改变了图像onmouseover,并使用代码mouseOver="functionToChangeImageSource()"将其更改回到鼠标悬停状态,另一个鼠标悬停在鼠标悬停状态。Flex 4在mouseover上更改图像 - 当鼠标悬停快时,mouseout功能失败?

它可以正常工作,当你慢慢地将鼠标悬停在外,但是如果我快速将鼠标移动到它上面,它偶尔会停留在鼠标悬停的图像上,并且鼠标悬停功能似乎不会启动。是否有任何事情可以修复这个,还是没有人有任何想法,为什么它的发生?

此外,我已经尝试了rollOver和rollOut,但它有相同的问题。

代码如下(我切换它隐藏和鼠标悬停显示两个图像输入/输出,看它是否解决了这个问题,但它没有):

 <mx:Image source="images/logout.jpg" 
       left="0" 
       top="350" 
       top.dataViewState="470" 
       id="logoutimg" 
       includeIn="dataViewState, dataDayViewState" 
       rollOver="logoutimg_mouseOverHandler(event)" 
       click="doLogout()" 
       /> 

    <mx:Image source="images/logoutover.jpg" 
       left="0" 
       top="350" 
       top.dataViewState="470" 
       id="logoutoverimg" 
       includeIn="dataViewState, dataDayViewState" 
       rollOut="logoutoverimg_mouseOutHandler(event)" 
       visible="false" 
       click="doLogout()" /> 

而且功能如下:

protected function logoutimg_mouseOverHandler(event:MouseEvent):void 
     { 
      logoutimg.visible = false; 
      logoutoverimg.visible = true; 
     } 


     protected function logoutoverimg_mouseOutHandler(event:MouseEvent):void 
     { 
      logoutoverimg.visible = false; 
      logoutimg.visible = true; 
     } 

我想你是正确的mouseover事件没有完成之前mouseout是,但如何解决这个问题?

+0

向我们展示您的代码和/或指向正在运行的样本的链接。在“鼠标进入”操作完成之前,您最有可能将鼠标移出。 – JeffryHouser 2011-03-06 23:04:58

+0

查看带有代码的更新编辑 - 谢谢。 – Taro 2011-03-06 23:48:42

回答

1

我猜这是一个问题,可以采取处理程序在超出/取决于快速切换可见性的速度。

但这里的主要问题是你做错了。

你并不需要2个图像,只是有一个形象,并更改源属性:

<mx:Image source="images/logout.jpg" 
     left="0" 
     top="350" 
     top.dataViewState="470" 
     id="logoutimg" 
     includeIn="dataViewState, dataDayViewState" 
     rollOver="logoutimg_mouseOverHandler(event)" 
     rollOut="logoutoverimg_mouseOutHandler(event)" 
     click="doLogout()" 
     /> 



    protected function logoutimg_mouseOverHandler(event:MouseEvent):void 
{ 
    logoutimg.source="images/logoutover.jpg"; 
} 


protected function logoutoverimg_mouseOutHandler(event:MouseEvent):void 
{ 
    logoutimg.source="images/logout.jpg"; 
} 

编辑:如果你看到的闪烁,尝试embed syntax。你也可以用Flex Css和悬停属性来做到这一点(不需要代码)。

3

你最好使用这一行代码

<mx:Image source="images/logout.jpg" 
      left="0" 
      top="350" 
      top.dataViewState="470" 
      id="logoutimg" 
      includeIn="dataViewState, dataDayViewState" 
      rollOver="event.currentTarget.source = 'images/logoutover.jpg'" 
      rollOut="event.currentTarget.source = 'images/logout.jpg'" 
      click="doLogout()" 
      /> 
1

我们最近遇到了同样的问题,唯一的真正的解决方案似乎是一个按钮,改变其高达更换图片,请向下,覆盖并禁用皮肤以嵌入版本的图像。

0

如果您只使用mouseUpmouseDown,您将遇到的唯一问题是用户在图像上单击鼠标时,如果鼠标仍然向下,则将鼠标移离图像。在这种情况下,图像保留在mouseDown版本中。为了解决这个问题,你还需要包含一个rollOut条件,以恢复到mouseUp图像。现在,所有的基地都被覆盖了。

相关问题