这是布局:
<s:Scroller>
<s:VGroup>
<s:List id="list1"/>
<s:List id="list2"/>
<component:ThirdPartyComponent/>
</s:VGroup>
</s:Scroller>
所以,我的应用程序应该只显示1向右滚动,这是scoller,list1,list2等不应该显示滚动。
它工作正常,直到我们发现鼠标滚轮不能正常工作。似乎是子组件(list和thirdparty)捕获的mouseWheel
事件。
通过网络搜索找到解决方案,有stopImmediatePropagation()
子事件mouseWheel
的解决方案,但似乎不是一个好的解决方案。在ThirdPartyCompoent的部分旁边,滚动是一个私有成员,所以无法从ThirdPartyCompoent中听mouseWheel
任何想法?
到目前为止,通过监听mouseWheel
事件并在那里禁用根VGroup mouseChildren
来解决案例,然后在根VGroup
点击处理程序上启用mouseChildren
。 但如果有更多的elegan解决方案,请发表评论。
答案 0 :(得分:1)
也许这些选项可以帮助你
选项#:1
<component:ThirdPartyComponent
creationComplete = "afterCreation()"
id = "TPComponent">
<fx:Script>
// You could use initialize or creationComplete to handle MouseWheel Listener
private function afterCreation():void{
this.addEventListener(MouseEvent.MOUSE_WHEEL, hoverHandler);
}
private function hoverHandler(e:MouseEvent):void{
if(!e.isDefaultPrevented()){
e.preventDefault();
e.cancelBubble = true;
e.cancel = true;
e.returnValue = false;
}
return false;
}
</fx:Script>
</component:ThirdPartyComponent>
但我建议您使用MouseEvent.ROLL_OVER禁用子组件中的MouseWheel,因为它覆盖了显示对象容器的任何子对象的所有区域。 buble事件应返回false,以便孩子们没有机会发送包括MOUSE_WHEEL在内的任何鼠标事件。
选项#:2
<component:ThirdPartyComponent
creationComplete = "afterCreation()"
id = "TPComponent">
<fx:Script>
private function afterCreation():void{
this.mouseChildren = false;
}
</fx:Script>
</component:ThirdPartyComponent>
通过将mouseChildren设置为false,可以神奇地将任何mouseChildren上的事件提供给父级。 mouseChildren不等于mouseEnabled,因此任何给定的返回都会产生不同的影响:)
你可以结合选项#1&amp;选项#2或选择其中一个,这是最适合你的:)
答案 1 :(得分:0)