改变YUI菜单的鼠标行为

时间:2009-01-22 20:55:09

标签: menu yui

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

按照这些例子,如果我这样做,菜单就出现了,一切都接近我想要的样子:

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

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

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

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

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

但这不起作用。在调试器中逐步执行,您可以看到它确实在mousedown上显示菜单,但随后会立即隐藏菜单。全速前进,看起来根本没有任何事情发生。

有什么想法吗?

2 个答案:

答案 0 :(得分: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);
  • 托德

答案 1 :(得分:0)

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

我真正想要的是菜单,就像每个版本的Mac OS上的菜单一样(直到最近OS X添加了“点击使菜单'粘'到默认行为)。