创建一个保持在div内的浮动框

时间:2011-03-28 04:51:31

标签: javascript html css

我正在尝试创建一个div'浮动',其行为类似于固定div(无论滚动如何都卡在特定位置),但当它碰到div的边界时,它会停止被修复。

当滚动条位于顶部时,它应该将div放置在包含div内的0处(距离顶部100个像素)并且当滚动条到达底部时,它应该防止浮动板移出容器。浮子的高度是静态的,但容器的高度是动态的。

我已经看到了这种类型的这种类型,但无法弄清楚如何为它找到一个好的例子。

如果可能的话,我想避免使用jQuery,因为我想它应该只需要一些简单的JavaScript来确定相对于它所在的div的当前位置。

谢谢。

2 个答案:

答案 0 :(得分:2)

好的伙计们,这是一个完整的解决方案。我只在Firefox和IE中测试了这个,但它应该全面工作(我认为)。这是直接的JavaScript,jQuery使用。第一个JS函数确保返回的高度适用于各种浏览器。

修改 - 我对此进行了改进,见下文。

<html>
<head>
<style type="text/css">
* {margin:0;padding:0;}
#header {height:300px;width:100%;background:#888;}
#main {height:800px;width:70%;background:#eee;float:left;}
#side {width:30%;height:auto;background:#ddd;float:left;position:relative;}
#floater {height:400px;width:90%;background:#dcd;top:0px;position:absolute;}
#footer {height:300px;width:100%;background:#888;clear:both;}
</style>
<script>
function getPageY() {
 var height = 0;
 if(typeof(window.pageYOffset) == 'number') {
  height = window.pageYOffset;
 }
 else if(document.body && document.body.scrollTop) {
  height = document.body.scrollTop;
 }
 else if(document.documentElement && document.documentElement.scrollTop) {
  height = document.documentElement.scrollTop;
 }
 return height;
}
onload=function() {
 window.onscroll = scroll;
 function scroll() {
  ybox.value = "this: "+getPageY();
  var f = document.getElementById("floater");
  var y = getPageY()-300; // minus header height
  var divh = document.getElementById("main").offsetHeight;
  if (divh > 400) { // greater than floater height
   divh -= 400; // minus floater height
   if (y < 0) y = 0;
   else if (y > divh) y = divh;
   f.style.top = y+"px";
  }
 }
}
</script>
</head>
<body>
<div id="header"></div>
<div id="main"></div>
<div id="side"><div id="floater">Float Content<br />
<input name="ybox" id="ybox"></div></div>
<div id="footer"></div>
</body>
</html>

这是有效的,但是对于图像来说它非常有弹性。当它被卡在一个位置时,我修改它以使用固定位置。用这个替换三个匹配的行以获得更平滑的结果:

if (y < 0) {y = 0;f.style.position = "absolute";}
else if (y > divh) {y = divh;f.style.position = "absolute";f.style.top = divh+"px";}
else {f.style.position = "fixed";f.style.top = 0;}

答案 1 :(得分:0)

我已经实现了这个并且相当不错。 http://net.tutsplus.com/tutorials/html-css-techniques/creating-a-floating-html-menu-using-jquery-and-css/。但这只是使用jquery完成的。如果只是简单的javascript,我会通过任何链接告诉你。