我正在尝试像www.zara.com那样做一个底部菜单。
我的代码有一个透明的影片剪辑,当鼠标滑过它时显示菜单,当鼠标滚出时隐藏。
菜单出现在那个透明的影片剪辑上,所以我可以使用翻滚和滚出操作来使用透明的 MC 对菜单进行操作。
这里的问题是当鼠标在我的菜单 MC 上滚动时,它的行为就像滚动透明影片剪辑一样。
如何在不推出第一个影片剪辑的情况下使鼠标在另一个影片剪辑上滚动?
是不是要混淆视听?
谢谢!
我正在尝试像www.zara.com那样做一个底部菜单。
我的代码有一个透明的影片剪辑,当鼠标滑过它时显示菜单,当鼠标滚出时隐藏。
菜单出现在那个透明的影片剪辑上,所以我可以使用翻滚和滚出操作来使用透明的 MC 对菜单进行操作。
这里的问题是当鼠标在我的菜单 MC 上滚动时,它的行为就像滚动透明影片剪辑一样。
如何在不推出第一个影片剪辑的情况下使鼠标在另一个影片剪辑上滚动?
是不是要混淆视听?
谢谢!
哦!我刚想起一些有趣的事情,可能会解决你的问题。
当触发 MouseEvent.ROLL_OUT 事件时,将使用具有该relatedObject
属性的 MouseEvent 对象调用侦听器函数。这是对获得鼠标焦点(翻转)的对象的引用-在您的情况下,如果将此属性设置为您的其他 MovieClip 对象,您可以忽略该事件,然后在您的其他 MovieClip 对象滚动时手动触发该事件out (以便它同时推出它们)。
这是一个来自javascript技术的快速而肮脏的技巧
1.)在clipA rollout中构建额外的逻辑,它会等待一小段时间,然后在关闭菜单之前检查鼠标是否在菜单上。
// define a boolean value for the moust beeing on the menu
public var menuOver:Boolean = false;
public function onMenuOver( event:MouseEvent ):void
{
menuOver = true;
// other menu code here
}
public function onMenuOut( event:MouseEvent ):void
{
menuOver = false;
// other menu code here
}
public function onMainClipOver( event:MouseEvent ):void
{
// show menu code here
}
public function onMainClipOut( event:MouseEvent ):void
{
setTimeout(execMainClipOut,100);
}
/**
* close the menu only if the mouse is not over the menu
*/
public function execMainClipOut()
{
if(!menuOver){
// close the menu
}
}
当一个影片剪辑 B 出现在另一个影片剪辑 A 的顶部时,影片剪辑 A 将触发 MouseEvent.ROLL_OUT 事件。这是因为 MovieClip B 正在阻止 MovieClip A 接收任何 MouseEvents(因为它在顶部)。
如果您不需要从MovieClip B 接收任何MouseEvents,您可以将其mouseEnabled
属性设置为false
,然后它下面的MovieClip A 将接收MouseEvents。
此外,根据在您的特定情况下是否有意义,您可以使 MovieClip B 成为 MovieClip A 的子级,这样当 MovieClip B 遮住 MovieClip A 时,不会触发 ROLL_OUT 事件。
我希望这有助于回答你的问题。
如上所述,relatedObject 完美地工作
例如,如果您有 MovieClip A,然后在顶部有 Movieclip B。您希望影片剪辑 B 在滚动影片剪辑 A 时显示并在滚动影片剪辑 A 时隐藏,
通常发生的情况是,Movieclip B 会显示,但是当您将鼠标悬停在 B 上时,Moveclip B 会消失,因为 B 位于 A 之上,会发生推出事件
所以在Movieclip A rollout 甚至只使用if((event.relatedObject == MoveClipB) { //如果它滚动到B,它是一个相关的对象,不要做任何事情} else { //隐藏B }
使用时,B 的事件仍然有效