Menu 更改YUI菜单';老鼠的捕鼠行为

Menu 更改YUI菜单';老鼠的捕鼠行为,menu,yui,Menu,Yui,我正在使用Yui构建一个“弹出式”菜单,它与鼠标的工作方式有点不同。这不是一个ContextMenu,因为我希望它能够响应左键单击,而ContextMenu似乎致力于响应右键单击 下面的例子中,如果我这样做,菜单就会出现,一切都接近我想要的: YAHOO.util.Event.addListener(myClickTarget, 'click', myThingGotClicked); 在myThingGotClicked函数中,我手动设置菜单的位置并show() 我的问题是,我想将菜单可见性

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

下面的例子中,如果我这样做,菜单就会出现,一切都接近我想要的:

YAHOO.util.Event.addListener(myClickTarget, 'click', myThingGotClicked);
在myThingGotClicked函数中,我手动设置菜单的位置并
show()

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

“显而易见”的解决方案是:

YAHOO.util.Event.addListener(myClickTarget, 'mousedown', myThingGotClicked);
但这不起作用。在调试器中单步执行时,您可以看到它确实会在鼠标向下移动时打开菜单,但随后某些内容会立即隐藏菜单。全速行驶时,看起来什么也没发生


有什么想法吗?

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

var myThingGotClicked = function (event) {

    YAHOO.util.Event.stopPropagation(event);

    // Do other stuff

};

YAHOO.util.Event.on(myClickTarget, 'mousedown', myThingGotClicked);
  • 托德

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

这里我真正想要的是菜单,它可以像Mac OS的每一个版本上的菜单一样工作(直到最近OS X添加了“单击以使菜单“粘滞”到默认行为)