javascript - 当 div 到达页面顶部时,让 div 粘在另一个 div 下
问题描述
我有一个.stickyMenu
位于页面中间的 div。当.stickyMenu
它与底部接触时.navB
,我希望它粘在那里。当用户向上滚动时,我希望它脱离原来的位置。
事情是,我也希望它是动态的,因为.gapA
它可以是任何高度(目前使用偏移量350
作为示例)。
所以在下面的演示中,当橙色 div 滚动到蓝色 div 的底部时,我希望它在向下滚动时粘在那里,然后在向上滚动时,灰色 div 存在的地方,我希望它松开并返回它的自然位置。
当前代码和结果:
(function($) {
$(document).ready(function() {
$(window).scroll(function(e) {
var $el = $('.stickyMenu');
var isPositionFixed = ($el.css('position') == 'fixed');
if ($(this).scrollTop() > 350 && !isPositionFixed) {
$el.css({
'position': 'fixed',
'top': '90px',
'width': '100%',
'left': '0px',
'background': 'orange',
'z-index': '1'
});
}
if ($(this).scrollTop() < 350 && isPositionFixed) {
$el.css({
'position': 'static',
'top': '50px'
});
}
});
});
})(jQuery);
body {
margin: 0;
}
.wrap{
position: relative;
display: block;
}
.wrap .navA {
background-color: red;
height: 50px;
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.wrap .navB {
background-color: blue;
height: 90px;
position: fixed;
top: 50px;
left:0;
width: 100%;
}
.gapA{
height: 300px;
background-color: grey;
}
.stickyMenu {
height: 70px;
background-color: orange;
}
.gapB{
height: 1500px;
background-color: lightgrey;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<div class="navA"></div>
<div class="navB"></div>
</div>
<div class="gapA"></div>
<div class="stickyMenu"></div>
<div class="gapB"></div>
解决方案
尝试这个
(function($) {
$(document).ready(function() {
$(window).scroll(function(e) {
var $el, nav, top,
$el = $('.stickyMenu');
nav = $('.navB');
top = nav.height() + nav.position().top;
if ($(this).scrollTop() >= top) {
$el.css({
'position': 'fixed',
'top': top,
'width': '100%',
'left': '0px',
'background': 'orange',
'z-index': '1'
});
}else{
$el.css({
'position': '',
'top': top,
'width': '100%',
'left': '0px',
'background': '',
'z-index': ''
});
}
});
});
})(jQuery);
body {
margin: 0;
}
.wrap{
position: relative;
display: block;
}
.wrap .navA {
background-color: red;
height: 50px;
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.wrap .navB {
background-color: blue;
height: 90px;
position: fixed;
top: 50px;
left:0;
width: 100%;
}
.gapA{
height: 300px;
background-color: grey;
}
.stickyMenu {
height: 70px;
background-color: orange;
}
.gapB{
height: 1500px;
background-color: lightgrey;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<div class="navA"></div>
<div class="navB"></div>
</div>
<div class="gapA"></div>
<div class="stickyMenu"></div>
<div class="gapB"></div>
推荐阅读
- json - Flutter 将 Json 数据传输到另一个页面
- node.js - 是否可以使用 node.js 的 readline 库以编程方式模拟按键?
- html - 如何避免来自 css calc 函数的负值?
- eslint - 用于在三元语句的冒号周围强制空格的 Eslint 规则?
- angular - 打字稿类型'字符串| 留言 | (string[] | Message[])[]' 不能分配给类型 'string[] | 信息[]'
- mysql - 即使我是管理员也无法写入 .bash_profile 文件
- scala - 如何创建地图列以计算没有 udaf 的出现次数
- python - 由于某种原因无法从 p 标签获取文本 - Selenium (Python)
- reactjs - 使用 Firebase onSnapshot 在不刷新的情况下使用新添加的事件填充 React-Big-Calendar
- mysql - mysql - 将数组值作为列而不是值进行转义和读取的问题