jQuery UI对话框定位

我正在尝试使用jQuery对话框用户界面库,以便当它hover在一些文本旁边的对话框。 jQuery对话框中的位置参数是从当前视口的左上angular开始测量的(换句话说,无论您当前在哪里, [0, 0]将始终将其置于浏览器窗口的左上angular滚动到)。 但是,我知道检索位置的唯一方法是相对于整个页面的元素。

以下是我目前的。 position.top被计算为1200左右,这使对话远低于页面上其余的内容。

 $(".mytext").mouseover(function() { position = $(this).position(); $("#dialog").dialog('option', 'position', [position.top, position.left]); } 

我如何find正确的位置?

谢谢!

查看一些对话框的其他实现的jQuery插件。 Cluetip似乎是一个function丰富的工具提示/对话框样式插件。 第四个演示听起来类似于你正在做的事情(虽然我看到它没有你正在寻找的精确定位选项)。

作为替代,你可以使用jQuery的UI Position工具,例如

 $(".mytext").mouseover(function() { var target = $(this); $("#dialog").dialog("widget").position({ my: 'left', at: 'right', of: target }); } 

感谢上面的一些答案,我尝试了一下,最终发现你所要做的就是编辑modal dialog定义中的“position”属性:

 position:['middle',20], 

JQuery对于水平“X”值的“中间”文本没有问题,我的对话框popup中间,从顶部向下20px。

我心里的JQuery。

看完所有的回复后,终于为我工作了:

 $(".mytext").mouseover(function() { var x = jQuery(this).position().left + jQuery(this).outerWidth(); var y = jQuery(this).position().top - jQuery(document).scrollTop(); jQuery("#dialog").dialog('option', 'position', [x,y]); }); 

以Jaymin的例子更进一步,我想出了这个定位一个jQuery的ui对话框元素上面刚刚点击的元素(认为“讲话泡泡”):

 $('#myDialog').dialog( 'open' ); var myDialogX = $(this).position().left - $(this).outerWidth(); var myDialogY = $(this).position().top - ( $(document).scrollTop() + $('.ui-dialog').outerHeight() ); $('#myDialog').dialog( 'option', 'position', [myDialogX, myDialogY] ); 

请注意,在计算相对宽度和高度偏移量之前,我“打开”了ui-dialog元素。 这是因为jQuery不能在页面中没有物理地显示ui-dialog元素的情况下评估outerWidth()或outerHeight()。

只要确保在对话框选项中将'modal'设置为false,你应该是一个OK。

http://docs.jquery.com/UI/API/1.8/Dialog

左上angular的固定对话框示例:

 $("#dialogId").dialog({ autoOpen: false, modal: false, draggable: false, height: "auto", width: "auto", resizable: false, position: [0,28], create: function (event) { $(event.target).parent().css('position', 'fixed');}, open: function() { //$('#object').load... } }); $("#dialogOpener").click(function() { $("#dialogId").dialog("open"); }); 

检查你的<!DOCTYPE html>

我注意到,如果你错过了HTML文件顶部的<!DOCTYPE html> ,那么即使你指定了位置:{my:'center',在:'center',of:window}

EG: http : //jsfiddle.net/npbx4561/ – 从运行窗口中复制内容并删除DocType。 保存为HTML并运行以查看问题。

 $(".mytext").mouseover(function() { var width = 250; var height = 270; var posX = $(this).offset().left - $(document).scrollLeft() - width + $(this).outerWidth(); var posY = $(this).offset().top - $(document).scrollTop() + $(this).outerHeight(); $("#dialog").dialog({width:width, height:height ,position:[posX, posY]}); } 

在元素下面放置一个对话框。 我使用offset()函数只是因为它计算相对于浏览器左上angular的位置,但是position()函数计算相对于父div或iframe的位置,该位置是元素的父级。

而不是做纯粹的jquery,我会做:

 $(".mytext").mouseover(function() { x= $(this).position().left - document.scrollLeft y= $(this).position().top - document.scrollTop $("#dialog").dialog('option', 'position', [y, x]); } 

如果我正确地理解你的问题,你的代码就是定位对话框,就好像页面没有滚动一样,但是你想要把滚动考虑进去。 我的代码应该这样做。

要把它放在控制之上,你可以使用这个代码:

  $("#dialog-edit").dialog({ ... position: { my: 'top', at: 'top', of: $('#myControl') }, ... }); 

本页面显示如何确定您的滚动偏移量。 jQuery可能有类似的function,但我找不到它。 使用页面上显示的getScrollXY函数,您应该能够从.position()结果中减去x和y坐标。

有点晚了,但是现在可以通过使用$ j(object).offset()。left和.top来做到这一点。

我不认为讲话泡沫是正确的。 我调整了一下,这样它就可以工作,项目在链接下面打开。

 function PositionDialog(link) { $('#myDialog').dialog('open'); var myDialogX = $(link).position().left; var myDialogY = $(link).position().top + $(link).outerHeight(); $('#myDialog').dialog('option', 'position', [myDialogX, myDialogY]); } 

为了确定中心位置,我使用:

 open : function() { var t = $(this).parent(), w = window; t.offset({ top: (w.height() / 2) - (t.height() / 2), left: (w.width() / 2) - (t.width() / 2) }); } 

这里是代码..,如何定位jQuery UI对话框中心……

 var $about = $("#about"); $("#about_button").click(function() { $about.dialog({ modal: true, title: "About the calendar", width: 600, close: function() { $about.dialog("destroy"); $about.hide(); }, buttons: { close : function() { $about.dialog("close"); } } }).show(); $about.dialog("option", "position", 'center'); }); 

我已经尝试了所有提出的解决scheme,但他们不会工作,因为对话框不是主要文档的一部分,将有自己的层(但这是我的教育猜测)。

  1. 使用$("#dialog").dialog("option", "position", 'top')初始化对话框
  2. 打开$(dialog).dialog("open");
  3. 然后获取显示的对话框的x和y(不是文档的任何其他节点!)

    var xcoord = $(dialog).position().left + ADD_MODIFIER_FOR_X_HERE;

    var ycoord= $(dialog).position().top + ADD_MODIFIER_FOR_Y_HERE;

    $(dialog).dialog('option', 'position', [xcoord , ycoord]);

这样的坐标是从对话框而不是从文档,并根据对话框的层次来改变位置。

我尝试了很多方法让我的对话框居中在页面上,看到代码:

$("#dialog").dialog("option", "position", 'top')

创build时不要改变对话框的位置。

而不是,我更改select器级别以获取整个对话框。

$("#dialog").parent() < – 这是dialog()函数在DOM上创build的父对象,这是因为select器$(“#dialog”)不会应用属性top,剩下。

为了让我的对话框居中 ,我使用了jQuery-Client-Centering-Plugin

$( “#对话”)父()centerInClient()。

你可以使用$(this).offset() ,这个位置与父类相关

上面的解决scheme是非常真实的…但UI对话框不保留窗口大小后的位置。 下面的代码是这样的

  $(document).ready(function(){ $(".test").click(function(){ var posX = $(".test").offset().left - $(document).scrollLeft() + $(".test").outerWidth(); var posY = $(".test").offset().top - $(document).scrollTop() + $(".test").outerHeight(); console.log("in click function"); $(".abc").dialog({ position:[posX,posY] }); }) }) $(window).resize(function(){ var posX=$(".test").offset().left - $(document).scrollLeft() + $(".test").outerWidth(); var posY = $(".test").offset().top - $(document).scrollTop() + $(".test").outerHeight(); $(".abc").dialog({ position:[posX,posY] }); }) 
 $("#myid").dialog({height:"auto", width:"auto", show: {effect: 'fade', speed: 1000}, hide: {effect: 'fade', speed: 1000}, open: function( event, ui ) { $("#myid").closest("div[role='dialog']").css({top:100,left:100}); } }); 

您可以在中心显示的样式中置顶,看到代码:

.ui-dialog {top:100px!important;}

这种风格应该显示从顶部100px的对话框。