固定侧边栏滚动,防止按下页脚
Fixed sidebar scroll, prevent pushing footer down
我正试图让一个固定的侧边栏与您一起沿着视口滚动。这里是一个工作示例
代码笔
$(function() {
var $sidebar = $("#sidebar"),
$window = $(window),
offset = $sidebar.offset(),
topPadding = 15;
$window.scroll(function() {
if ($window.scrollTop() > offset.top) {
$sidebar.stop().animate({
marginTop: $window.scrollTop() - offset.top + topPadding
});
} else {
$sidebar.stop().animate({
marginTop: 0
});
}
});
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<nav class="navbar navbar-fixed-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<!-- /.nav-collapse -->
</div>
<!-- /.container -->
</nav>
<!-- /.navbar -->
<div class="container">
<div class="row row-offcanvas row-offcanvas-right">
<div class="col-xs-12 col-sm-9">
<p class="pull-right visible-xs">
<button type="button" class="btn btn-primary btn-xs" data-toggle="offcanvas">Toggle nav</button>
</p>
<div class="jumbotron">
<h1>Hello, world!</h1>
<p>This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.</p>
</div>
<div class="row">
<div class="col-xs-6 col-lg-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<!--/.col-xs-6.col-lg-4-->
<div class="col-xs-6 col-lg-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<!--/.col-xs-6.col-lg-4-->
<div class="col-xs-6 col-lg-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<!--/.col-xs-6.col-lg-4-->
<div class="col-xs-6 col-lg-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<!--/.col-xs-6.col-lg-4-->
<div class="col-xs-6 col-lg-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<!--/.col-xs-6.col-lg-4-->
<div class="col-xs-6 col-lg-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<!--/.col-xs-6.col-lg-4-->
</div>
<!--/row-->
</div>
<!--/.col-xs-12.col-sm-9-->
<div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar">
<div class="list-group">
<a href="#" class="list-group-item active">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
</div>
</div>
<!--/.sidebar-offcanvas-->
</div>
<!--/row-->
<hr>
<footer>
<p>© 2015 Company, Inc.</p>
</footer>
</div>
<!--/.container-->
这是有问题的代码
$(function() {
var $sidebar = $("#sidebar"),
$window = $(window),
offset = $sidebar.offset(),
topPadding = 15;
$window.scroll(function() {
if ($window.scrollTop() > offset.top) {
$sidebar.stop().animate({
marginTop: $window.scrollTop() - offset.top + topPadding
});
} else {
$sidebar.stop().animate({
marginTop: 0
});
}
});
});
信用卡技巧
我遇到的问题是,如果视口高度太小,它会碰到页脚并开始无限滚动。
您可以通过使编辑器具有较低的高度并保持向下滚动来重新创建它。
是否有任何方法可以检测sidebar
是否已击中footer
,然后禁用滚动?
"有没有办法检测侧边栏是否碰到了页脚,然后禁用滚动?"-所以现在你的问题是当侧边栏碰到底部时禁用滚动。
所以,我做的是:
- 我得到了网页的整个高度和侧边栏的高度
-
然后我创造了一个这样的条件。
var $sidebar = $("#sidebar"), $window = $(window), offset = $sidebar.offset(), topPadding = 15; var body = document.body, html = document.documentElement; var height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight); $window.scroll(function() { if ($window.scrollTop() <= height - $("#sidebar").height()) { if ($window.scrollTop() > offset.top) { $sidebar.stop().animate({ marginTop: $window.scrollTop() - offset.top + topPadding }); } else { $sidebar.stop().animate({ marginTop: 0 }); } } });
它将检查窗口的scrollTop是否小于(整个网页的高度-侧边栏的高度),如果是,动画将发生,如果不是(如果它击中页面的底部),滚动将停止。
这是链接
希望这对你有用:)
您可以将其添加到您的css中:
@media (max-height: 500px) {
.sidebar-offcanvas {
margin-top:0 !important;
}
}
您需要跟踪页脚的初始位置,然后检查侧边栏是否已到达底部。这里是更新的代码
$(function() {
var $sidebar = $("#sidebar"),
$window = $(window),
offset = $sidebar.offset(),
topPadding = 60;
var $footer = $('#footer');
var footeroffset = $footer.offset(); // here we get initial position of footer
$window.scroll(function() {
if ($window.scrollTop() > offset.top) {
// we check if the sidebar is touching the footer
if(footeroffset.top >($window.scrollTop() - offset.top + topPadding+$sidebar.height())){
$sidebar.stop().animate({
marginTop: $window.scrollTop() - offset.top + topPadding
});
}
} else {
$sidebar.stop().animate({
marginTop: 60
});
}
});
});
这是链接
相关文章:
- 当侧边栏很长时,滚动/固定侧边栏会被切断
- 固定位置侧边栏不滚动-设置内容的高度
- 向下滚动页面时在侧边栏中显示部分标题(也许使用 BS scrollspy?
- 滚动时固定了侧边栏的计算
- 如何使侧边栏固定时滚动像粘性
- Angular Material,侧边栏中的列表不可滚动
- 固定侧边栏滚动,防止按下页脚
- 当窗口向上滚动时,如何使用粘性侧边栏向上移动
- 如何将滚动条添加到仅在悬停时出现的固定侧边栏
- 用户向下滚动 x 金额后侧边栏移动
- 使滚动侧边栏停止在页脚处
- 滚动侧边栏抛出 Javascript 错误“无法调用 null 的方法'偏移量'
- 粘性侧边栏没有按应有的方式滚动
- Safari 中的侧边栏滚动粘性问题
- 无论如何,我的侧边栏都是固定的.如何使用侧边栏进行滚动
- 如何使大小可调整,滚动侧边栏像Facebook's”;聊天/事件提示器”;
- 修复滚动到页脚时的侧边栏(使用Bootstrap类)
- 如何在滚动时显示侧边栏,并在页面顶部隐藏侧边栏
- 带有侧边栏的单滚动网页
- 如何修复滚动上的侧边栏