6

这个问题说明了一切!我正在为 jQuery 寻找一个易于使用的 blockUI 替代方案。几天来,我一直在尝试在 FireFox 和 IE 中使用 blockUI 将对话框居中,但没有机会。它不起作用。我查看了有关居中 blockUI 对话框的问题(如何使用 jQuery 和 blockUI 使 DIV 居中于页面上?),但它仅适用于 Firefox。

4

5 回答 5

6

你可能想检查这个插件调用jQuery MSG。它适用于大多数浏览器,包括 ie6。而且它的重量很轻,只有 4k 的未压缩代码注释。

示例代码

// this will block the page and shows a `please wait` message
$.msg();

// you can change the content by the following code
$.msg({
  content : '<img src="loading.gif"/> Sending mail :)'
});

演示页面

github上的源代码

完整的文档和用法请查看这篇文章

或者如果你只是想集中一些 DOM 元素,你可以看看这个jQuery Center 插件

于 2011-04-07T04:31:01.960 回答
3

对于对话框,我已经从 blockUI 切换到Jquery UI。我认为这更好。

于 2009-01-27T22:32:02.700 回答
0

这是我遇到并稍作修改的扩展。现在看,我认为它实际上有点乱,可以使用清理(我认为有一些未使用的变量)

$.fn.vCenter = function(options) {
    var pos = {
        sTop : function() {
            return window.pageYOffset || $.boxModel && document.documentElement.scrollTop || document.body.scrollTop;
        },
        wHeight : function() {
            if ($.browser.opera || ($.browser.safari && parseInt($.browser.version) > 520)) {
                return window.innerHeight - (($ (document).height() > window.innerHeight) ? getScrollbarWidth() : 0);
            } else if ($.browser.safari) {
                return window.innerHeight;
            } else {
                return $.boxModel && document.documentElement.clientHeight || document.body.clientHeight;
            }
        }
    };
    return this.each(function(index) {
        if (index == 0) {
            var $this = $(this),
                $w = $(window),
                topPos = ($w.height() - $this.height()) / 2 + $w.scrollTop()
            ;
            if (topPos < 0 && (options == undefined || !options.allowNegative)) topPos = 0;
            $this.css({
                position: 'absolute',
                marginTop: '0',
                top: topPos //pos.sTop() + (pos.wHeight() / 2) - (elHeight / 2)
            });
        }
    });
};
$.fn.hCenter = function(options) {
    return this.each(function(index) {
        if (index == 0) {
            var $this = $(this),
                $d = $(document),
                leftPos = ($d.width() - $this.width()) / 2 + $d.scrollLeft()
            ;
            if (leftPos < 0 && (options == undefined || !options.allowNegative)) leftPos = 0;
            $this.css({
                position: "absolute",
                left: leftPos
            });
        }
    });
};
$.fn.hvCenter = function(options) {
    return this.vCenter(options).hCenter(options);
};

用法:

$('#verticalCenter').vCenter();
$('#horizontalCenter').hCenter();
$('#bothCentered').hvCenter();
于 2009-01-27T05:09:02.460 回答
0

如果问题是由与最新版本的 jQuery 一起加载的维度插件引起的,那么维度在几个版本之前被合并到核心中并导致冲突。

于 2010-11-22T18:28:40.180 回答
0

从文档中:

为什么我在 Linux 上的 FF 中看不到覆盖?

有几个人告诉我,FF/Linux 中的整页不透明度渲染速度非常慢,因此默认情况下该平台禁用它。您可以通过覆盖 applyPlatformOpacityRules 属性来启用它,如下所示:

// enable transparent overlay on FF/Linux 
$.blockUI.defaults.applyPlatformOpacityRules = false;
于 2016-01-13T03:40:08.907 回答