通过偏移数学居中在非 webkit 浏览器中不起作用

发布于 2024-11-28 03:06:46 字数 1451 浏览 0 评论 0原文

代码: http://jsfiddle.net/LPF85/6/

在 FF、IE7 和 IE9 中(我测试过的唯一不运行 WebKit 的浏览器),似乎 left 属性要么总是设置为 0,要么在 IE 的情况下设置为负数。

我的定位代码完全基于文档的尺寸。

function open_img_in_face_box(id, width){
    max_width = $j(document).width();
    max_height = $j(document).height();
    padding = 150;

    passed_width = width || (max_width - (2 * padding));

    var img = $j('#' + id); 
    dom_img = document.getElementById(id); 

    $j(document).bind('reveal.facebox', function() { 
        $j("#facebox .image img").width(passed_width);
    })
    // display 
    jQuery.facebox({ 
        image: img.attr('src')
    });

    // center and adjust size
    var aspect_ratio = img.width() / img.height();
    var img_width = passed_width;
    var img_height = passed_width / aspect_ratio;

    window_center_y = max_height / 2;
    window_center_x = max_width / 2;

    offset_y = window_center_y - (img_height / 2);
    offset_x = window_center_x - (img_width / 2);

    var fbx = $j('#facebox');
    fbx.css('position', 'absolute');
    fbx.css('left', offset_x + 'px !important');
    fbx.css('top', offset_y + 'px !important');
    fbx.css('margin-left', 'auto');
    fbx.css('margin-right', 'auto');

}

margin-leftmargin-right 在这里似乎没有做任何事情,我对此很满意,因为左边的数学应该适用于所有浏览器,对吗? (这只是数学)

facebox / lightbox 的目标是水平和垂直居中。

The code: http://jsfiddle.net/LPF85/6/

In FF, IE7, and IE9 (the only browsers I've tested that don't run WebKit), it seems that the left attribute is either always set to 0, or, in IE's case, negative.

My positioning code is all based off the dimensions of the document.

function open_img_in_face_box(id, width){
    max_width = $j(document).width();
    max_height = $j(document).height();
    padding = 150;

    passed_width = width || (max_width - (2 * padding));

    var img = $j('#' + id); 
    dom_img = document.getElementById(id); 

    $j(document).bind('reveal.facebox', function() { 
        $j("#facebox .image img").width(passed_width);
    })
    // display 
    jQuery.facebox({ 
        image: img.attr('src')
    });

    // center and adjust size
    var aspect_ratio = img.width() / img.height();
    var img_width = passed_width;
    var img_height = passed_width / aspect_ratio;

    window_center_y = max_height / 2;
    window_center_x = max_width / 2;

    offset_y = window_center_y - (img_height / 2);
    offset_x = window_center_x - (img_width / 2);

    var fbx = $j('#facebox');
    fbx.css('position', 'absolute');
    fbx.css('left', offset_x + 'px !important');
    fbx.css('top', offset_y + 'px !important');
    fbx.css('margin-left', 'auto');
    fbx.css('margin-right', 'auto');

}

margin-left and margin-right don't appear to do anything here, which I'm fine with, because the left math should work across all browsers, right? (It is just math)

The goal of the facebox / lightbox, is to be centered both horizontally and vertically.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

且行且努力 2024-12-05 03:06:46

为什么你首先要以编程方式计算位置?如果用户调整页面大小怎么办?这可以通过纯 CSS 轻松完成。

我不太明白你的 jsFiddle (或者我没有看到同样的事情?)所以我只会给你这个脚本: http://jsfiddle.net/minitech/8U4Ke/ 可以根据需要进行修改。它被注释。 ;)

现在可以轻松隐藏和显示 - 隐藏、淡出 .overlay。要显示,请淡入。要更改内容,请替换 .popup 中的 HTML。随意添加关闭框之类的东西。

Why would you even programatically calculate the position in the first place? What if the user resizes the page? This can easily be done in pure CSS.

I don't really understand your jsFiddle (or am I not seeing the same thing?) so I'll just give you this script: http://jsfiddle.net/minitech/8U4Ke/ that can be modified however you like. It's commented. ;)

Now it's easy to hide and show - to hide, fade out .overlay. To show, fade it in. To change the contents, replace the HTML in .popup. Add close boxes and whatnot liberally.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文