gpt4 book ai didi

javascript - 创建一个位于 div 内的 float 框

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:36 25 4
gpt4 key购买 nike

我正在尝试创建一个 div“floater”,它的行为类似于一个固定的 div(无论滚动如何卡在一个特定的位置),但是当它到达它所在的 div 的边界时,它就会停止固定。

当滚动条在顶部时,它应该将 div 放置在包含的 div 中的 0 处(例如距离顶部 100 像素),当滚动条到达底部时,它应该防止 float 项超出容器. float 的高度是静态的,但容器的高度是动态的。

我到处都看到过这种类型,但不知道如何为它找到一个好的例子。

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

谢谢。

最佳答案

好的伙计们,这是一个完整的解决方案。我只在 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;}

关于javascript - 创建一个位于 div 内的 float 框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com