【问题标题】:Flex mouse wheel event not triggered on VBoxVBox 上未触发 Flex 鼠标滚轮事件
【发布时间】:2011-09-01 07:16:59
【问题描述】:

我在使用鼠标滚轮滚动 VBox 时遇到问题。当鼠标悬停在 VBox 中的任何组件或垂直滚动​​条上时,它可以正常工作,但当鼠标悬停在 VBox 的背景上时,不会发生滚动。

<mx:VBox width="100%" height="150">
   <s:Label text="A large label." height="100" />
   <s:Label text="A label." />
   <s:Label text="A label." />
   <s:Label text="A label." />
   <s:Label text="A label." />
   <s:Label text="A large label." height="100" />
   <s:Label text="A label." />
   <s:Label text="A label." />
   <s:Label text="A label." />
   <s:Label text="A label." />
</mx:VBox>

我查看了 VBox 和 Container(VBox 继承)的代码。当存在垂直滚动条时,Container 会为其自身添加一个 MouseEvent.MOUSE_WHEEL 侦听器。我在这个函数中设置了一个断点,但只有当我的鼠标悬停在子组件上时才会调用它。

作为最后的努力,我尝试设置 mouseEnabled、focusEnabled 和其他一些随机属性,但这些都没有帮助。

有没有人知道如何让 VBox 正确运行并在我的鼠标悬停在 VBox 上方时滚动?提前致谢。

(由于不需要的捕捉行为,目前不能切换到 spark Scroller。)

【问题讨论】:

    标签: apache-flex flex3


    【解决方案1】:

    您的问题——您可能已经猜到了——是 MouseEvents 没有触发。我怀疑与 FocusEvents 存在相同的问题。容器不会自行调度这些事件;他们只会从孩子那里得到事件;接受鼠标和焦点事件。

    作为一种解决方法,您可以尝试将透明图像作为第一个子组件添加到您的组件中。背景仍然会显示出来,但图像应该会拾取相关事件并将它们冒泡到容器中。

    【讨论】:

    • 是否可以修改容器以接受鼠标事件,或者有什么基本的东西可以防止这种情况发生?
    • @takteek 我想你的意思是;可以修改容器以调度 MouseEvents。我的怀疑是肯定的;但我不知道那会带来什么。你必须打开框架代码,看看你能弄清楚什么。
    • 我看了一段时间的Container源代码,但没有得到任何结果。当我无法弄清楚某些东西在 flex 中是如何工作时,这很令人沮丧,但在这一点上,我认为这不值得付出努力。我最终使用setStyle("backgroundColor", 0xFFFFFF); 强制它创建一个背景,然后允许滚动工作。谢谢。
    【解决方案2】:

    一年前我们遇到过类似的问题,鼠标滚轮滚动在 TabNavigator 上不起作用。在这里找到解决方法: https://bugs.adobe.com/jira/browse/FP-289https://bugzilla.mozilla.org/show_bug.cgi?id=448567

    解决方案很简单:在 flash start HTML 中删除以下行:

    "wmode", "transparent", 
    

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多