你如何制作一个带有塞子但没有jQuery 的粘性垂直侧边栏?有任何片段/插件吗?我不需要它来支持旧版浏览器。
我的意思不仅仅是位置:固定,它必须保持在同一个地方,然后当你滚动到某个点时开始变得粘滞(固定)。然后它必须在停止点停止跟随。
像http://stickyjs.com,但不是 jQuery。有许多可用的 jQuery 插件。
你如何制作一个带有塞子但没有jQuery 的粘性垂直侧边栏?有任何片段/插件吗?我不需要它来支持旧版浏览器。
我的意思不仅仅是位置:固定,它必须保持在同一个地方,然后当你滚动到某个点时开始变得粘滞(固定)。然后它必须在停止点停止跟随。
像http://stickyjs.com,但不是 jQuery。有许多可用的 jQuery 插件。
基本上就这么简单:
window.onscroll = function() {
var sticky = document.getElementById('stickynav');
if( document.body.scrollTop+document.documentElement.scrollTop > 240)
sticky.className = "stuck";
else sticky.className = "";
};
.stuck
然后只需在类中定义position:fixed
向元素添加类似内容的样式。
这是一个不需要position: fixed
更改的尝试,使用元素-文档距离作为参考,让您滚动到底部:
var node = document.getElementById('side'), // your element
nodeOffs = node.offsetTop, // distance relative to its parent
parent = node;
// loop through parents to determine the distance relative to the document top
while(parent = parent.offsetParent)
if(parent.offsetTop)
nodeOffs += parent.offsetTop;
window.addEventListener('scroll', function(event){
// current scroll position relative to the body
var scrollPos = document.body.scrollTop;
if(scrollPos > nodeOffs){
// don't do anything if the elements height is larger than the
// remaining scroll content height (distance including)
if(scrollPos < (document.body.scrollHeight - node.clientHeight - nodeOffs))
node.style.top = (scrollPos - nodeOffs) + 'px';
}else{
node.style.top = '0px';
}
});
这可能无法处理所有可能的情况(例如,它不考虑边距)。这就是为什么有一个插件,如果你不想自己调整 js,你应该使用它......
可以用更短的 JS 来做到这一点。
const stickyDiv = document.querySelector(".sticky");
window.addEventListener("scroll", function() {
stickyDiv.style.top = window.pageYOffset + "px";
});
.left {
position: relative;
}
.sticky {
position: absolute;
}
/* below is unecessary CSS just to demo the page */
.left {
width:40%;
float:left;
}
.right {
width: 40%;
min-height: 3000px;
float:right;
}
<div class="container">
<div class="row">
<div class="left">
<article class="sticky">
<h2>Sticky sidebar title here</h2>
<p>Text here</p>
</article>
</div>
<div class="right">
<article>
<h2>Regular page here</h2>
<img src="http://lorempixel.com/400/200/cats">
<p>Regular page content here.</p>
</article>
</div>
</div>
</div>
我知道这是一个老问题,它要求一个 JavaScript 解决方案但是,因为这里的主要想法是让一个粘性侧边栏工作,我必须分享一个纯 CSS 解决方案,它可以按预期工作:
.sticky {
position: -webkit-sticky; /* Safari */
position: sticky;
top: 0;
}
只需将该sticky
类应用于您的侧边栏元素即可。
这肯定会为大家节省大量时间和精力。
参考:https ://developer.mozilla.org/es/docs/Web/CSS/position#sticky