Javascript 有人能解释为什么每次使用jQuery.offset()时都会移位吗?
有人能向我解释一下这里发生了什么事吗 我正在尝试使用jQuery将向导元素集中在页面上。第一次对元素调用showCentered()时,该元素在页面上正确居中,看起来一切正常。但是,第二次将元素移到一边(并且也不是以前值的两倍) 所以第一次叫它的时候,效果很好。第二次(和第三次,…等等)它离页面越来越远 示例代码:Javascript 有人能解释为什么每次使用jQuery.offset()时都会移位吗?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,有人能向我解释一下这里发生了什么事吗 我正在尝试使用jQuery将向导元素集中在页面上。第一次对元素调用showCentered()时,该元素在页面上正确居中,看起来一切正常。但是,第二次将元素移到一边(并且也不是以前值的两倍) 所以第一次叫它的时候,效果很好。第二次(和第三次,…等等)它离页面越来越远 示例代码: function showCentered(selector){ d = $(selector); h = d
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()在设置偏移量之前,code>to可以解决问题。可能不是原因,但您应该使用局部变量!太棒了-移动的d.show()成功了-也谢谢你的解释!