【发布时间】:2014-07-10 22:15:20
【问题描述】:
谁能给我解释一下这里发生了什么?
我正在尝试使用 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');
这是上面的工作演示:Codepen.io
当为 .demo 元素运行上述函数时,我得到以下 h、w、hMax、wMax、_top、_left 的值,然后是 offset().top、offset().left。注意第二次偏移值是如何变化的。
另外值得注意的是,这将影响任何在第一次之后使用偏移量的元素。
谁能解释为什么每次使用后偏移都会发生变化?
【问题讨论】:
-
可能不是这个原因,但你应该使用局部变量!
标签: javascript jquery html css