我编写了以下脚本来显示隐藏元素,然后将其位置固定到页面中心。
function popUp(id,type) {
var popUpBox = document.getElementById(id);
popUpBox.style.position = "fixed";
popUpBox.style.display = "block";
popUpBox.style.zIndex = "6";
popUpBox.style.top = "50%";
popUpBox.style.left = "50%";
var height = popUpBox.offsetHeight;
var width = popUpBox.offsetWidth;
var marginTop = (height / 2) * -1;
var marginLeft = (width / 2) * -1;
popUpBox.style.marginTop = marginTop + "px";
popUpBox.style.marginLeft = marginLeft + "px";
}
当onclick事件调用此函数时,offsetHeight和offsetWidth计算不正确,因此无法正确对齐元素。如果我第二次单击onclick元素,则offsetHeight和offsetWidth会正确计算。
我试过以我能想象的各种方式改变顺序,这让我发疯!非常感谢任何帮助!
答案 0 :(得分:1)
我猜你的身高和宽度没有在父母身上定义。看到这个小提琴,它工作得很好。男孩我很聪明。 http://jsfiddle.net/mrtsherman/SdTEf/1/
旧答案 我认为这可以简单地完成。您将顶部和左侧属性设置为50%。这将使固定元件从中心略微偏离。我想你正试图用负边距把它拉回到正确的位置。相反 - 只需从头开始计算正确的上/左值,不要担心余量。这是一个jQuery解决方案,但它可以很容易地适应普通的js。我还认为如果窗口已完全滚动,您当前的代码将无效。
//this code will center the following element on the screen
$('#elementid').click(function() {
$(this).css('position','fixed');
$(this).css('top', (($(window).height() - $(this).outerHeight()) / 2) + $(window).scrollTop() + 'px');
$(this).css('left', (($(window).width() - $(this).outerWidth()) / 2) + $(window).scrollLeft() + 'px');
});