2

我正在使用 Dojo 版本 1.6.1。我正在构建一个菜单,其中包含一个对话框 dijit 作为 PopupMenuItem 的弹出窗口。但是,如果菜单停靠在应用程序的右侧,则此方法有效,我需要将弹出窗口显示在菜单的左侧。我似乎无法让它工作。如果我使用另一种类型的小部件(如 ColorPalette),则效果很好。使用弹出子菜单和弹出式调色板,如果菜单位于屏幕右侧,则所有内容都向左打开,如果菜单位于屏幕左侧,则所有内容都向右侧打开。Dojo 只是自动处理这个问题。但是对于任何 Dialog 小部件,即使是空的,它总是会弹出到 PopupMenuItem 的右侧,而不管菜单在屏幕上的哪个位置。我想也许可以指定 div 的高度和宽度,即 dijit。

这是代码的简化版本:

<div data-dojo-type="dijit.Menu" id="toolPalette" style="position:absolute; right:0; top:0; z-index: 999;">
</div>

<script>
    // Grab the div for the menu, declared in the HTML above.
    var toolPalette = dijit.byId("toolPalette");

    // This tool button has a popup
    var menuItem1 = new dijit.PopupMenuItem({
        id: "menuItem1",
        iconClass: "shelterIcon",
        popup: new dijit.Dialog()
    });
    toolPalette.addChild(menuItem1);

    // This tool button does not have a popup
    var menuItem2 = new dijit.MenuItem({
        id: "menuItem2",
        iconClass: "shelterIcon"
    });
    toolPalette.addChild(menuItem2);

    toolPalette.startup();
</script>

任何帮助是极大的赞赏!我已经尝试了我能想到的一切。

4

1 回答 1

1

查找当前光标位置的方法

document.onmouseup = getXY;
var mouseX, mouseY;

function getXY(e) {
    mouseX= (e || event).clientX;
    mouseY= (e || event).clientY;
    if (document.documentElement.scrollTop > 0) {
        mouseY= mouseY+ document.documentElement.scrollTop;
    }
}

你的代码在这里。

 var myDialog = new dijit.Dialog();
 var menuItem1 = new dijit.PopupMenuItem({
        id: "menuItem1",
        iconClass: "shelterIcon",
        popup: myDialog 
    });

现在将 X 和 Y 应用于您的对话框。

dijit.popup.open({
    x: mouseX,
    y : mouseY,
    popup: myDialog 
 });
于 2012-06-06T07:51:38.963 回答