我正在使用Dojo版本1.6.1。我正在构建一个菜单,其中有一个Dialog dijit作为PopupMenuItem的弹出窗口。但是,如果菜单停靠在应用程序的右侧,我需要弹出窗口显示在菜单的左侧。我似乎无法让这个工作。如果我使用其他类型的小部件(如ColorPalette),这可以正常工作。使用弹出子菜单和弹出式ColorPalette,如果菜单位于屏幕的右侧,则一切都向左打开,如果菜单位于屏幕的左侧,则一切都向右打开。 Dojo只是自动处理这个问题。但是对于任何Dialog小部件,即使是空的小部件,它总是弹出PopupMenuItem的右侧,无论屏幕上的菜单在哪里。我认为也许指定div的高度和宽度是dijit.Dialog会解决这个问题,但事实并非如此。
以下是代码的简化版本:
<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>
非常感谢任何帮助!我已经尝试了我能想到的一切。
答案 0 :(得分: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
});