我正在处理下面的演示。为什么在添加和删除两个类fixed-top
和fixed-bottom
之间,我无法生成平滑的过渡(类似平滑滚动),而我已经添加了CSS角色?
-webkit-transition: all 3s ease;
-moz-transition: all 3s ease;
-o-transition: all 3s ease;
transition: all 3s ease;
var lastScrollTop = 0;
$(window).scroll(function(event) {
var st = $(this).scrollTop();
if (st > lastScrollTop) {
if (st > 500) {
$('.box').removeClass("fixed-bottom").addClass("fixed-top");
}
} else {
if (st < 500) {
$('.box').removeClass("fixed-top").addClass("fixed-bottom");
}
}
lastScrollTop = st;
});
html,
body {
height: 100%;
}
.container {
height: 2000px;
}
.box {
width: 100%;
height: 50px;
background: #777;
}
.fixed-top {
position: fixed;
top: 0;
-webkit-transition: all 3s ease;
-moz-transition: all 3s ease;
-o-transition: all 3s ease;
transition: all 3s ease;
}
.fixed-bottom {
position: fixed;
bottom: 0;
-webkit-transition: all 3s ease;
-moz-transition: all 3s ease;
-o-transition: all 3s ease;
transition: all 3s ease;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="box fixed-bottom"></div>
</div>
做到这一点的最佳方法是什么(上下移动)?
一个条带上下跳跃,因为您没有在 .fixed-top
中设置底部值,而在 .fixed-bottom
中没有设置底部值,然后过渡专业人士无法意识到transite的属性。您需要获取window.height()才能正确穿透。您可以使用jQuery做到这一点,使您的CSS较短看摘要
var lastScrollTop = 0;
var y = $( window ).height() - $('.box').height() + "px";
$('.box').css("top", y);
$(window).scroll(function(event) {
var st = $(this).scrollTop();
if (st > lastScrollTop) {
if (st > 500) {
$('.box').css("bottom", y);
$('.box').css("top","0");
}
} else {
if (st < 500) {
$('.box').css("top", y);
$('.box').css("bottom","0");
}
}
lastScrollTop = st;
});
html,
body {
height: 100%;
}
.container {
height: 2000px;
}
.box {
width: 100%;
height: 50px;
position: fixed;
bottom: 0;
background: #777;
-webkit-transition: all 3s ease;
-moz-transition: all 3s ease;
-o-transition: all 3s ease;
transition: all 3s ease;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="box fixed-bottom"></div>
</div>