在各种网站的帮助下,我使用包含我的联系信息的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创建的,它不接受脚本,除非它全部放在一行上)。
答案 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