Linux / Ubuntu:当上下文菜单打开时,轮子事件不会触发

时间:2015-06-29 23:55:20

标签: linux firefox-addon xul

这是我正在运行的代码:

{{1}}

如果我在浏览器窗口上滚动滚轮,则会触发滚轮事件。但是我的目的是仅在按住鼠标右键时检测车轮事件。

问题是,按住鼠标右键打开上下文菜单面板,这是好的和预期的,但现在轮子事件不会触发,除非我的鼠标在打开的上下文菜单上。有谁知道如何解决这个问题?

即使上下文菜单可见,在Windows系统上也不会发生此行为(旁注:在Windows上,上下文菜单在鼠标向上之前不显示,但我强制它显示以测试此情况,并且即使我的鼠标没有超过上下文菜单。)

1 个答案:

答案 0 :(得分:1)

UI问题:

您描述的UI听起来有点像大多数人期待的那样。使用双指鼠标按键+滚轮组合是不常见的。用户非常熟悉使用 ALT CTRL Shift 作为按钮和鼠标操作的修饰符。您正在以一种让用户感到困惑的方式组合2个已使用的UI控件(滚轮和右键单击)。此外,它还试图覆盖这两个控件的现有操作。在我看来,最好使用 Shift -scroll-wheel,因为它没有默认操作。 CTRL -scroll-wheel的默认操作是缩放和 ALT -scroll-wheel将UI保持在下一个键盘输入被视为菜单的状态选择。

哪个window

您没有说:此代码运行的上下文是什么?它是一个框架脚本吗?或者更明确地说,您使用window来设置监听器?您使用的是文档window,标签window还是整体浏览器window?您确定所使用的操作系统类型相同吗?我希望如果您使用整体浏览器window,您应该获取所有事件,即使鼠标不在上下文菜单上也是如此。如果您正在使用其他一个,那么仅在关注模态上下文菜单时才接收事件并非不合理。如果您没有专门获取整体浏览器window,那么您使用的window可能就是其中之一。

阻止上下文菜单显示在mousedown

一个简单的解决方案应该是阻止上下文菜单在mousedown上打开。 Event.preventDefault()

function ondown(e) {
    e.preventDefault();
    console.info('downed, e:', e);
}

Event.stopPropagation()

function ondown(e) {
    e.stopPropagation();
    console.info('downed, e:', e);
}

应该阻止在mousedown事件上显示上下文菜单。假设它没有根据另一个事件显示,该代码将阻止它被显示。实际上,鉴于此代码未检查按钮的哪个鼠标按钮或任何可能的修饰符,它将在stopPropagation()个事件中preventDefault()mousedown,这在实际情况下是不可取的 - 世界代码。换句话说,这是一个非常简单的示例,您可以对其进行扩展,以便您只是篡夺您实际定位的事件。