控制dijit.带有鼠标悬停事件的菜单栏

Controlling dijit.MenuBar with MouseOver events

本文关键字:事件 菜单栏 悬停 鼠标 dijit 控制      更新时间:2023-09-26

在Dojo中,是否可以配置dijit ?菜单栏,使菜单触发MouseOver和MouseOut事件?实际上,这种行为已经可用,但它是通过初始或连续的鼠标单击事件打开或关闭的-因此,最初,MouseOver不会导致菜单弹出,但如果用户单击菜单项,菜单栏就会响应MouseOver事件。连续的鼠标点击将再次关闭此行为。

我想要的是菜单和子菜单弹出基于MouseOver事件没有点击事件的干扰。请查看http://dojotoolkit.org/reference-guide/dijit/MenuBar.html上的示例,了解我的意思。

你的问题引起了我的兴趣,我想出了一个可行的解决方案。

我检查了dijit。_MenuBase的源代码在dijit/Menu.js,显然有一个this。在继续之前检查的isActive标志。因此,我创建了一个子类,预先将这个标志设置为true:

_ActivateOnMouseoverMixin = dojo.declare(null, {
    onItemHover: function(item){
        if(!this.isActive){
            this._markActive();
        }
        this.inherited(arguments);
    }
});
ActiveMenuBar = dojo.declare([dijit.MenuBar, _ActivateOnMouseoverMixin], {});
作为奖励,您还可以使用popupDelay变量修改延迟(我在示例中更改它以更快)

我不知道是否有另一种更合理的方法来做同样的事情。

下面是一个扩展了'Hugomg'解决方案的示例,用于取消菜单和子菜单的悬停:
[1]

[1]: http://jsfiddle.net/vg10c9md/2/