我有一个显示spark.List的应用程序。 我的列表中的每个项目都必须可见(没有垂直滚动)。
我需要我的应用程序可以在Web浏览器中滚动,所以我添加了一个包含所有组件的Scroller。当浏览器窗口太小而无法包含我的所有应用程序时,会出现scrollBar。
我的应用程序看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" >
<fx:Declarations>
</fx:Declarations>
<s:Scroller id="myScroller" width="100%" height="100%">
<s:VGroup >
<s:Label text="toto1"/>
<s:List>
<s:dataProvider>
<s:ArrayCollection>
<fx:String>item1</fx:String>
<fx:String>item2</fx:String>
<fx:String>item3</fx:String>
<fx:String>item4</fx:String>
<fx:String>item5</fx:String>
</s:ArrayCollection>
</s:dataProvider>
</s:List>
<s:Label text="toto2"/>
</s:VGroup>
</s:Scroller>
</s:Application>
我的问题在于鼠标滚轮事件。
当我将鼠标光标滚动到List之外时,一切正常。
当我用鼠标光标滚动到列表上时,没有任何反应。
如果列表没有滚动条,它看起来像是鼠标轮事件被停止了。
有谁知道如何解决这个问题?
答案 0 :(得分:1)
我注意到滚动条会捕获鼠标滚轮事件,即使它不可见/活动也是如此。
<s:Scroller left="0" top="0" right="0" bottom="0" id="scroller" minViewportInset="1" hasFocusableChildren="false">
<s:DataGroup id="dataGroup" itemRenderer="spark.skins.spark.DefaultItemRenderer">
<s:layout>
<s:VerticalLayout gap="0" horizontalAlign="contentJustify" requestedMinRowCount="5" />
</s:layout>
</s:DataGroup>
</s:Scroller>
只需将整个类复制并粘贴到新皮肤中,然后摆脱(删除)Scoller。如果您现在将此外观应用于其定义或CSS中的列表,那么您应该很高兴。
*您还需要删除我在第42,45,89,95行上可以看到的滚动条的4个引用。 List类不需要滚动器SkinPart。
答案 1 :(得分:0)
我仔细查看了SDK代码,我认为这是一个错误。在某个地方,有一段代码没有检查滚动条是否显示并对事件执行'preventDefault()',阻止它冒泡到父scoller。
您应该在bugs.adobe.com/flex上提交错误。
答案 2 :(得分:0)
我在这里找到了一个可接受的解决方法:flexache
英文很糟糕,但我刚刚在我的滚动条mainScroller
及其内部的vgroup mainVGroup
中添加了一个ID,并在滚动条的鼠标滚轮上添加了一个事件处理程序:
mainScroller.addEventListener(MouseEvent.MOUSE_WHEEL,
function scroller1_mouseWheelHandler(event:MouseEvent):void{
//calculate the new position
mainVGroup.verticalScrollPosition+=(event.delta*-20);
//stop the event’s bubbling
event.stopPropagation();
}
,true);
它并不完美(仍然有点口吃),但它符合我的目的。