我有一个 jQuery 对话框,该对话框位于屏幕中间。但是,它似乎在垂直方向上略微偏离中心。
这是代码:
$('#add_box').dialog({
autoOpen: true,
width: 300,
modal: true,
resizable: false,
bgiframe:true
});
任何想法为什么这不会居中?
如果您的视口在对话框显示后滚动,它将不再居中。通过在页面中添加/删除内容可能会无意中导致视口滚动。您可以通过调用以下方法在滚动/调整大小事件期间使对话框窗口居中:
$('my-selector').dialog('option', 'position', 'center');
您是否将 jquery.ui.position.js 添加到您的页面?我遇到了同样的问题,在这里检查了源代码并意识到我没有将该 js 添加到我的页面中,之后.. 对话框神奇地居中。
在这里挖掘一个旧坟墓,但为新的谷歌搜索者。
通过将此事件添加到对话框中,您可以在用户滚动时保持模型窗口的位置。这会将其从绝对定位更改为固定。无需监视滚动事件。
open: function(event, ui) {
$(this).parent().css('position', 'fixed');
}
我遇到了同样的问题。它最终成为jquery.dimensions.js插件。如果我删除它,一切正常。我之所以包含它是因为另一个需要它的插件,但是我从这里的链接中发现尺寸已包含在 jQuery 核心中很久以前(http://api.jquery.com/category/dimensions)。你应该可以简单地摆脱尺寸插件。
1.) jQuery 对话框以您放入的任何元素为中心。
如果没有更多信息,我的猜测是你有一个带有边距或类似内容的 body div。将弹出 div 移动到 body 级别,你会很高兴的。
2.) 如果您在加载时动态地将内容添加到 div,则居中将不正确。在您将数据放入其中之前,请勿显示 div。
将此添加到您的对话框声明中
my: "center",
at: "center",
of: window
例子 :
$("#dialog").dialog({
autoOpen: false,
height: "auto",
width: "auto",
modal: true,
position: {
my: "center",
at: "center",
of: window
}
})
只需在同一页面的 CSS 行下方添加即可。
.ui-dialog
{
position:fixed;
}
为了解决这个问题,我确保我的身高设置为 100%。
body { height:100% }
这在用户滚动时也保持中心位置。
此问题通常与通过锚标记 ( <a href='#' id='openButton'>Open</a>
) 打开对话框有关,并且不会阻止处理程序中的默认浏览器行为,例如
$('#openButton').click(function(event) {
event.preventDefault();
//open dialog code...
});
这通常不需要任何定位/滚动插件。
对我来说 jquery.dimensions.js 是罪魁祸首
我面临着同样的问题,即对话框没有居中打开并将我的页面滚动到顶部。我用来打开对话框的标签是一个锚标签:
<a href="#">View More</a>
英镑符号对我来说是个问题。我所做的只是修改锚中的 href,如下所示:
<a href="javascript:{}">View More</a>
现在我的页面很高兴并且使对话框居中。
我的场景:我不得不在页面上向下滚动以在单击按钮时打开对话框,由于窗口滚动,对话框没有垂直打开到窗口的中心,它超出了视口。
正如Ken上面提到的,在您设置模态内容后执行以下语句。
$("selector").dialog('option', 'position', 'center');
如果在模态打开之前预先加载了内容,只需在 open 事件中执行此操作,否则在 open 事件中操作 DOM 然后执行语句。
$( ".selector" ).dialog({
open: function( event, ui ) {
//Do DOM manipulation if needed before executing below statement
$(this).dialog('option', 'position', 'center');
}
});
它对我来说效果很好,最好的事情是你不包含任何其他插件或库来让它工作。
$('#dlg').dialog({
title: 'My Dialog',
left: (parseInt(jQuery(window).width())-1200)/2,
top:(parseInt(jQuery(window).height())-720)/2,
width: 1200,
height: 720,
closed: false,
cache: false,
modal: true,
toolbar:'#dlg-toolbar'
});
刚刚解决了同样的问题,问题是我没有导入一些js文件,比如widget.js :)
上述解决方案似乎都不适合我,因为我的代码动态生成两个包含 div 并且其中包含一个未缓存的图像。我的解决方案如下:
请注意 img 上的“加载”调用和对话框调用中的“关闭”参数。
var div = jQuery('<div></div>') .attr({id: 'previewImage'}) .appendTo('body') 。隐藏(); var div2 = jQuery('<div></div>') .css({ maxWidth: parseInt(jQuery(window).width() *.80) + 'px' , maxHeight: parseInt(jQuery(window).height() *.80) + 'px' ,溢出:'自动' }) .appendTo(div); var img = jQuery('<img>') .attr({'src': url}) .appendTo(div2) .load(函数(){ div.对话框({ “模态”:真 ,“宽度”:“自动” ,关闭:函数(){ div.remove(); } }); });
$("#dialog").dialog({
autoOpen: false,
height: "auto",
width: "auto",
modal: true,
my: "center",
at: "center",
of: window
})
这个解决方案确实有效,但只是因为较新的 jQuery 版本完全忽略了这一点并回退到默认值,这正是这个。因此,如果您只想将弹出窗口居中,则可以从选项中删除 position: 'center' 。
我不得不将它添加到我的 HTML 文件的顶部:<!doctype html>
. 我不需要设置position
属性。这是 jQuery 3.2.1。在 1.7.1 中,这不是必需的。
这就是我解决问题的方法,我添加了对话框的这个打开功能:
open: function () {
$('.ui-dialog').css("top","0px");
}
现在,无论页面滚动到何处以及在所有浏览器中,这都会在屏幕顶部打开对话框。
将对话框定位在屏幕中央:
$('#my-selector').parent().position({
my: "center",
at: "center",
of: window
});
我有同样的问题,当我输入对话框的高度时,这个问题得到了解决:
$("#dialog").dialog({
height: 500,
width: 800
});
您必须添加声明
在文档的顶部。
没有它,jquery 倾向于将对话框放在页面底部,并且在尝试拖动它时可能会出现错误。
我正在升级 jQuery UI 的旧实例,发现对话框小部件有一个扩展,它只是使用"center"
而不是position
对象。实现position
对象或删除参数完全适合我(因为中心是默认设置)。
以上解决方案都不适合我。我将在下面介绍我的方案和最终解决方案,以防万一有人遇到同样的问题。
场景:我使用自定义 jQuery 插件向位于对话框内的 HTML 元素添加滚动条。
我用它作为
$(response).dialog({
create: function (event, ui) {
$(".content-topp").mCustomScrollbar();
})
});
$(response).dialog({
open: function (event, ui) {
$(".content-topp").mCustomScrollbar();
$(this).dialog('option', 'position', 'center');
})
});
因此,如果您使用任何操作内容的自定义 jQuery 插件,则使用open事件调用它。
已解决... 此问题的解决方案是在 HTML 代码中缺少声明 <!doctype html>。如果你那里没有这个声明。JQuery UI 对话框的垂直居中无法正常工作。