jQuery对齐 - 相对于浏览器窗口?

时间:2012-01-28 19:29:04

标签: javascript jquery popup positioning relative

在各种网站的帮助下,我使用包含我的联系信息的javascript创建了一个非常简单的弹出框。我很满意它是如何工作的,除了出现的弹出窗口绝对定位,我希望它相对于浏览器窗口显示(即我希望弹出窗口出现在浏览器窗口的中心,无论如何当您单击信息图标时,您在页面上的位置。)

我对HTML很满意,但没有使用javascript。我知道相对定位在javascript中的工作方式非常不同,但我无法理解如何解决这个问题。任何建议将不胜感激。

网页位于:http://www.thirstlabmedia.com/

脚本如下:

<script type="text/javascript">
function toggle( div_id ) {
    var el = document.getElementById( div_id );
    if( el.style.display == 'none' ) {
        el.style.display = 'block';
    }
    else {
        el.style.display = 'none';
    }
}
function blanket_size( popUpDivVar ) {
    if( typeof window.innerWidth != 'undefined' ) {
        viewportheight = window.innerHeight;
    }
    else {
        viewportheight = document.documentElement.clientHeight;
    }
    if( ( viewportheight > document.body.parentNode.scrollHeight ) && ( viewportheight > document.body.parentNode.clientHeight ) ) {
        blanket_height = viewportheight;
    }
    else {
        if( document.body.parentNode.clientHeight > document.body.parentNode.scrollHeight ) {
            blanket_height = document.body.parentNode.clientHeight;
        }
        else {
            blanket_height = document.body.parentNode.scrollHeight;
        }
    }
    var blanket = document.getElementById( 'blanket' );
    blanket.style.height = blanket_height + 'px';
    var popUpDiv = document.getElementById( popUpDivVar );
    popUpDiv_height = window.innerHeight / 2 - 200;
    popUpDiv.style.top = popUpDiv_height + 'px';
}
function window_pos( popUpDivVar ) {
    if( typeof window.innerWidth != 'undefined' ) {
        viewportwidth = window.innerHeight;
    }
    else {
        viewportwidth = document.documentElement.clientHeight;
    }
    if( ( viewportwidth > document.body.parentNode.scrollWidth ) && ( viewportwidth > document.body.parentNode.clientWidth ) ) {
        window_width = viewportwidth;
    }
    else {
        if( document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth ) {
            window_width = document.body.parentNode.clientWidth;
        }
        else {
            window_width = document.body.parentNode.scrollWidth;
        }
    }
    var popUpDiv = document.getElementById( popUpDivVar );
    window_width = window_width / 2 - 200;
    popUpDiv.style.left = window_width + 'px';
}
function popup( windowname ) {
    blanket_size( windowname );
    window_pos( windowname );
    toggle( 'blanket' );
    toggle( windowname );
}
</script>

(我很抱歉把它全部放在一行;网站是通过Cargo Collective创建的,它不接受脚本,除非它全部放在一行上)。

1 个答案:

答案 0 :(得分:1)

使用CSS position : fixed

#my-element {
    position : fixed;
    top      : 50%;
    left     : 50%;
    margin   : -100px 0 0 -250px;
    width    : 500px;
    height   : 200px;
    z-index  : 1000;
}

以下是演示:http://jsfiddle.net/huRcV/1/

这使viewport中的500x200px元素居中。负边距用于使元素相对于其尺寸居中。如果用户滚动页面,该元素将保持在viewport

的中心位置

position的文档:https://developer.mozilla.org/en/CSS/position

  

固定

     

不要为元素留出空间。相反,将它定位在   指定相对于屏幕视口的位置,不移动   滚动时打印时,将其放在固定位置上   每一页。

可以使用JavaScript执行此操作,但使用CSS版本可能更好。如果你想使用jQuery,这是一个简单的例子:

var $myElement = $('#my-element');
$(window).on('scroll resize', function () {
    $myElement.css({
        top : ($(this).scrollTop() + ($(this).height() / 2)),
    });
});

以下是演示:http://jsfiddle.net/huRcV/(请注意,此演示position : fixed已更改为position : absolute