0

我正在使用 Yui 构建一个“弹出”菜单,该菜单与鼠标的工作方式与平时有所不同。这不是ContextMenu,因为我希望它响应左键单击,而 ContextMenu 似乎倾向于响应右键单击。

按照示例,如果我这样做,菜单就会出现,并且一切都接近我想要的:

YAHOO.util.Event.addListener(myClickTarget, 'click', myThingGotClicked);

在我的 myThingGotClicked 函数中,我手动设置了菜单的位置show()

我的问题是我想将菜单可见性“绑定”到鼠标按钮的状态。也就是说,在 mouseDown 上,我希望菜单出现,而在 mouseUp 上,我希望菜单消失(选择活动项目,如果有的话)。所以,监听“点击”事件并没有做正确的事情,因为“点击”只在 mouseUp 之后发送。

“明显”的解决方案是这样做:

YAHOO.util.Event.addListener(myClickTarget, 'mousedown', myThingGotClicked);

但这不起作用。在调试器中单步执行,您可以看到它确实会在鼠标按下时调出菜单,但随后会立即隐藏菜单。全速行驶时,似乎什么都没有发生。

有什么想法吗?

4

2 回答 2

1

问题是 MenuManager 类在文档级别侦听 mousedown 事件并隐藏所有可见的 Menu 实例。因此,由于您正在构建一种独特的 Menu 实现,因此您需要在处理程序中停止 mousedown 事件的传播,以便 MenuManager 不会处理该事件。这是给你的一些伪代码:

var myThingGotClicked = function (event) {

    YAHOO.util.Event.stopPropagation(event);

    // Do other stuff

};

YAHOO.util.Event.on(myClickTarget, 'mousedown', myThingGotClicked);
  • 托德
于 2009-01-22T23:37:29.943 回答
0

这有点接近,因为确实会弹出菜单,但是如果您尝试在菜单中进行选择,则下方页面的文本选择会有点疯狂。我认为,我还需要添加一个 mouseup 处理程序,因为菜单不会在鼠标释放时关闭。

我真正想要的是在每个版本的 Mac OS 上像菜单一样工作的菜单(直到最近,当 OS X 添加“单击以使菜单‘粘’到默认行为时)。

于 2009-01-26T19:32:51.407 回答