元素锁定在滚动纯 JavaScript 否 Jquery
Element locked on scroll pure JavaScript no Jquery
我试图在用户滚动浏览内容时将绿色框锁定到最顶部。但是,当你滚动时,绿色框的顶部有一个空隙(如演示所示)
我试过给绿框设置position为fixed,但是它跳出了红框。所以它需要保持绝对。
请查看我在此处设置的示例 http://jsfiddle.net/jpXjH/839/
或查看此处的代码
<div style="padding: 20px 0px; background-color:cyan;">
This is a header with some random content
</div>
<div style="width:480px; height:1400px; overflow:hidden; margin:auto;
border:1px solid gray; position:relative; background-color: #ff5d5d; ">
<div id="locked">
This element needs to be on the very top LOCKED when scrolled down.
However you can see there is a gap in the very top when you scroll.
</div>
</div>
<style>
#locked{
background-color: limegreen;
padding:10px;
width:150px;
position:absolute;
top:0;
right:0;
}
</style>
<script>
window.onscroll = changePos;
function changePos() {
var locked = document.getElementById("locked");
if (window.pageYOffset > 30) {
locked.style.position = "absolute";
locked.style.float = "right";
locked.style.top = pageYOffset + "px"
} else {
locked.style.position = "";
locked.style.top = "";
}
}
<script>
提前致谢
我能想到的最简单的解决方案是从您在 JS 中更改的 header.style.top 中减去顶部锁定栏的高度:
header.style.top = pageYOffset - 76 + "px"
显然你可以直接从元素中获取高度而不是硬编码。
您的 body 或 html 标签上可能有一些 padding/margin。检查它是否存在,然后通过从 window.pageYOffset 全局中减去数量来计算它。
您还需要考虑红色 div 之前的任何元素的高度。
为什么你不尝试使用固定位置,例如:
#header{
background-color: limegreen;
padding:10px;
width:150px;
position:fixed;
top:0;
right:0;
}
window.onscroll = changePos;
function changePos() {
var header = document.getElementById("header");
if (window.pageYOffset > 30) {
//header.style.position = "absolute";
header.style.float = "right";
//header.style.top = pageYOffset + "px"
} else {
header.style.position = "";
header.style.top = "";
}
}
如果你和红色容器对齐的话你可以用JS计算。
我试过给绿框设置position为fixed,但是它跳出了红框。所以它需要保持绝对。
请查看我在此处设置的示例 http://jsfiddle.net/jpXjH/839/
或查看此处的代码
<div style="padding: 20px 0px; background-color:cyan;">
This is a header with some random content
</div>
<div style="width:480px; height:1400px; overflow:hidden; margin:auto;
border:1px solid gray; position:relative; background-color: #ff5d5d; ">
<div id="locked">
This element needs to be on the very top LOCKED when scrolled down.
However you can see there is a gap in the very top when you scroll.
</div>
</div>
<style>
#locked{
background-color: limegreen;
padding:10px;
width:150px;
position:absolute;
top:0;
right:0;
}
</style>
<script>
window.onscroll = changePos;
function changePos() {
var locked = document.getElementById("locked");
if (window.pageYOffset > 30) {
locked.style.position = "absolute";
locked.style.float = "right";
locked.style.top = pageYOffset + "px"
} else {
locked.style.position = "";
locked.style.top = "";
}
}
<script>
提前致谢
我能想到的最简单的解决方案是从您在 JS 中更改的 header.style.top 中减去顶部锁定栏的高度:
header.style.top = pageYOffset - 76 + "px"
显然你可以直接从元素中获取高度而不是硬编码。
您的 body 或 html 标签上可能有一些 padding/margin。检查它是否存在,然后通过从 window.pageYOffset 全局中减去数量来计算它。
您还需要考虑红色 div 之前的任何元素的高度。
为什么你不尝试使用固定位置,例如:
#header{
background-color: limegreen;
padding:10px;
width:150px;
position:fixed;
top:0;
right:0;
}
window.onscroll = changePos;
function changePos() {
var header = document.getElementById("header");
if (window.pageYOffset > 30) {
//header.style.position = "absolute";
header.style.float = "right";
//header.style.top = pageYOffset + "px"
} else {
header.style.position = "";
header.style.top = "";
}
}
如果你和红色容器对齐的话你可以用JS计算。