Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能解释为什么每次使用jQuery.offset()时都会移位吗?_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 有人能解释为什么每次使用jQuery.offset()时都会移位吗?

Javascript 有人能解释为什么每次使用jQuery.offset()时都会移位吗?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,有人能向我解释一下这里发生了什么事吗 我正在尝试使用jQuery将向导元素集中在页面上。第一次对元素调用showCentered()时,该元素在页面上正确居中,看起来一切正常。但是,第二次将元素移到一边(并且也不是以前值的两倍) 所以第一次叫它的时候,效果很好。第二次(和第三次,…等等)它离页面越来越远 示例代码: function showCentered(selector){ d = $(selector); h = d

有人能向我解释一下这里发生了什么事吗

我正在尝试使用jQuery将向导元素集中在页面上。第一次对元素调用showCentered()时,该元素在页面上正确居中,看起来一切正常。但是,第二次将元素移到一边(并且也不是以前值的两倍)

所以第一次叫它的时候,效果很好。第二次(和第三次,…等等)它离页面越来越远

示例代码:

function showCentered(selector){
          d         = $(selector);
            h       = d.outerHeight();
            w       = d.outerWidth();
            hMax    = $(window).height();
            wMax    = $(window).width();

            _top    = (hMax / 2) - (h / 2);
            _left   = (wMax / 2) - (w / 2);

            if (_left < 0) _left = 0;
            if (_top < 0) _top = 0;

            d.offset({
                top:    _top,
                left:   _left
            });

        d.show();
}

//1st time, OK 
$('.demo').hide();
showCentered('.demo');

//2nd time, NOT OK
$('.demo').hide();
showCentered('.demo');
函数显示中心(选择器){
d=$(选择器);
h=d.外光();
w=d.外径();
hMax=$(window.height();
wMax=$(window.width();
_顶部=(hMax/2)-(h/2);
_左=(wMax/2)-(w/2);
如果(_left<0)_left=0;
如果(_top<0)_top=0;
d、 抵消({
顶部:_顶部,
左:_左
});
d、 show();
}
//第一次,好吗
$('.demo').hide();
以显示为中心(“.demo”);
//第二次,不好
$('.demo').hide();
以显示为中心(“.demo”);
以下是上述内容的工作演示:

当为.demo元素运行上述函数时,我会得到以下h、w、hMax、wMax、_top、_left的值,然后是offset().top、offset().left。请注意第二次偏移值是如何更改的

还需要注意的是,这将影响第一次使用偏移后的任何元素


有人能解释为什么每次使用后偏移量都会移动吗?

您无法可靠地获得隐藏元素的尺寸

jQuery试图进行补偿,但有时仍然会得到不正确的值。看


编辑:实际上真正的问题是$.offset()不能用于正确设置隐藏元素的位置。它尝试根据图元相对于偏移父图元的当前位置进行计算,如果图元被隐藏,这些计算就是错误的。只需移动
d.show()to可以解决问题。

可能不是原因,但您应该使用局部变量!太棒了-移动的d.show()成功了-也谢谢你的解释!