<menu id="list-menu" class="icon-list menu-iconic" label="Menu list">
<menupopup>
<vbox flex="1" class="help">
<html:div class="help-text">
<label>Here is help text</label>
</html:div>
</vbox>
<vbox flex="1" class="list" id="list-box">
Here is box with default height 300px;
</vbox>
<vbox flex="1">
<button class="button" value="Here is button" />
<button class="button" value="Here is button 2" />
</vbox>
</menupopup>
</menu>
如果我将鼠标光标快速移动到menupopup中的元素,它就会关闭。如何解决?
提前致谢。
答案 0 :(得分:1)
哦,我现在看到了,在视频中没有看到,但这是一个子菜单,当你的鼠标在菜单项上时会打开。
因此,当您将鼠标悬停在“代理列表&gt;”上时menuitem
,打开子menuitem
,现在想要将鼠标从此menuitem
移到打开的子菜单上,你必须小心移动鼠标,让它鼠标悬停在“代理”上列表&gt;“ menuitem
。如果你的鼠标离开了这个“代理列表&gt;”在menuitem
到达子menuitem
之前,menuitem
会使你的子menuitem
消失,即使你的鼠标现在超过了menuitem
。要解决此问题,您必须防止弹出窗口隐藏,如果鼠标位于您的子stopPropogation
上方。我会在这里给你写一些东西,我会继续努力。如果用户鼠标位于此面板上,我的解决方案将在popuphiding
上执行overlay.xul
。 但是在这里张贴这个@nmaier可以看出你的问题是什么,也许他在我工作的时候有更好的想法。
好的,这是解决方案:
在onmousenter
添加了onmouseleave
onmousedown
和<menupopup onmouseenter="Components.utils.reportError('entered');this.addEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmousedown="Components.utils.reportError('downed');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="Components.utils.reportError('left');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)">
这样的属性:
overlay.js
然后在preventHide: function(e) {
e.preventDefault();
Components.utils.reportError('PREVENTED HIDE'); //you can remove this, this is just a debug message to tell you when it hides
}
和此函数中:
stopPropogation
所以现在这可以做你想要的,你可以尝试从我的分叉安装插件:https://github.com/Noitidart/firex/
编辑:
好吧,即使我们实施了上述问题,我也想出了它隐藏的第二个问题。现在发生的事情恰恰相反。如果您小心地从“代理列表&gt;”移动到子菜单,现在从这里你迅速从子菜单移动到“代理列表&gt;”但是在你迷失“禁用代理”的方式上,它会隐藏它,这是正常的预期行为,但如果你想要阻止它,我明白了。忘记<menu>
我将编辑上面的代码。因此,解决方法是在onmouseenter="this.childNodes[0].addEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="this.childNodes[0].removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)"
标记中添加以下属性:event.relatedTarget
在子菜单项中移动鼠标时,它还触发了错误的进入和离开事件。所以我通过检查 <menu id="proxy-list-menu" class="icon-list menu-iconic" label="&proxy-list;" onmouseenter="this.childNodes[0].addEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="this.childNodes[0].removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)">
<menupopup onmouseenter="if (!event.relatedTarget) { Components.utils.reportError('entered');this.addEventListener('popuphiding', ProxyAddonBar.preventHide, false) }" onmousedown="Components.utils.reportError('downed');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="if (!event.relatedTarget) { Components.utils.reportError('left');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false) }">
来解决这个问题。
所以结合上面的两个解决方案,在overlay.xul中我们现在有了这个:
menuitem
@nmaier的问题。进行更改后,如果您从“代理列表&gt;”中移动鼠标子菜单项并意外地悬停,但最后将光标放在子{ - 1}}上,它会阻止隐藏。如果您将鼠标移开并转到“Disalbe Proxy”menuitem
或“检查连接速度”,即使我已经删除了preventHide
功能,它也不会隐藏子菜单项。只有将鼠标悬停在“代理列表&gt;”上时它才会关闭试。
如果您通过将鼠标悬停在“代理列表&gt;”上打开子菜单并小心地将鼠标移到打开的子菜单,而不会意外地离开“代理列表&gt;”项目,然后一旦你到达子菜单然后通过鼠标悬停到“禁用代理”或“检查连接速度”,它会在一秒钟之后关闭。所以这是正常的隐藏行为,为什么当我阻止隐藏时,一旦我将鼠标悬停在其他标签上,它就不会像平常一样隐藏?