淡出 in/Fade 导航栏
Fade in/Fade out navigation bar
我正在尝试将我的导航栏设置为保持固定并在我向下滚动时淡化到 0.8 不透明度,并在我向上滚动时 return 到他的正常位置和不透明度。
我的jquery代码是:
jQuery(document).ready(function(){
var navOffset = jQuery("nav").offset().top;
jQuery(window).scroll(function(){
var scrollPos = jQuery(window).scrollTop();
if(scrollPos > navOffset) {
jQuery("nav").addClass("fixed");
jQuery("nav").fadeTo(1500,0.5);
} else {
jQuery("nav").removeClass("fixed");
jQuery("nav").fadeTo(1500,1);
}
});
});
我的 css 代码是:
.fixed {
position:fixed;
top:0;
}
当我向下滚动时它会淡出,但当我向后滚动时它不会 return 到他原来的不透明度 up.I 我是 jQuery 的新手。
还有其他解决方案吗?因为当我向上滚动时,"fadeTo" 操作所花费的时间非常延迟(~4 秒),我认为这不正常。
我认为问题在于您在每次触发 scroll
事件时都设置了 fadeTo
函数。因此,当您向下滚动时,您将向动画效果队列添加许多 "fade out" 次调用。当您向上滚动时,所有 "fade out" 效果(每个效果需要 1.5 秒)必须在第一个 "fade in" 调用发生之前完成。
您可以通过添加对 jQuery 的 .stop(true)
的调用来解决此问题,这样每个滚动事件都会清除动画队列:
jQuery(document).ready(function() {
var navOffset = jQuery("nav").offset().top;
jQuery(window).scroll(function() {
var scrollPos = jQuery(window).scrollTop();
jQuery("nav").stop(true);
if (scrollPos > navOffset) {
jQuery("nav").addClass("fixed");
jQuery("nav").fadeTo(1500, 0.5);
} else {
jQuery("nav").removeClass("fixed");
jQuery("nav").fadeTo(1500, 1.0);
}
});
});
body {
height: 4096px;
padding-top: 32px;
}
nav {
height: 128px;
width: 100%;
border: 1px solid black;
background-color: #00aa00;
}
.fixed {
position: fixed;
top: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>so</title>
<meta charset="UTF-8">
</head>
<body>
<nav></nav>
</body>
</html>
请注意,这意味着 fadeTo
动画在用户停止滚动之前不会发生。
我正在尝试将我的导航栏设置为保持固定并在我向下滚动时淡化到 0.8 不透明度,并在我向上滚动时 return 到他的正常位置和不透明度。
我的jquery代码是:
jQuery(document).ready(function(){
var navOffset = jQuery("nav").offset().top;
jQuery(window).scroll(function(){
var scrollPos = jQuery(window).scrollTop();
if(scrollPos > navOffset) {
jQuery("nav").addClass("fixed");
jQuery("nav").fadeTo(1500,0.5);
} else {
jQuery("nav").removeClass("fixed");
jQuery("nav").fadeTo(1500,1);
}
});
});
我的 css 代码是:
.fixed {
position:fixed;
top:0;
}
当我向下滚动时它会淡出,但当我向后滚动时它不会 return 到他原来的不透明度 up.I 我是 jQuery 的新手。
还有其他解决方案吗?因为当我向上滚动时,"fadeTo" 操作所花费的时间非常延迟(~4 秒),我认为这不正常。
我认为问题在于您在每次触发 scroll
事件时都设置了 fadeTo
函数。因此,当您向下滚动时,您将向动画效果队列添加许多 "fade out" 次调用。当您向上滚动时,所有 "fade out" 效果(每个效果需要 1.5 秒)必须在第一个 "fade in" 调用发生之前完成。
您可以通过添加对 jQuery 的 .stop(true)
的调用来解决此问题,这样每个滚动事件都会清除动画队列:
jQuery(document).ready(function() {
var navOffset = jQuery("nav").offset().top;
jQuery(window).scroll(function() {
var scrollPos = jQuery(window).scrollTop();
jQuery("nav").stop(true);
if (scrollPos > navOffset) {
jQuery("nav").addClass("fixed");
jQuery("nav").fadeTo(1500, 0.5);
} else {
jQuery("nav").removeClass("fixed");
jQuery("nav").fadeTo(1500, 1.0);
}
});
});
body {
height: 4096px;
padding-top: 32px;
}
nav {
height: 128px;
width: 100%;
border: 1px solid black;
background-color: #00aa00;
}
.fixed {
position: fixed;
top: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>so</title>
<meta charset="UTF-8">
</head>
<body>
<nav></nav>
</body>
</html>
请注意,这意味着 fadeTo
动画在用户停止滚动之前不会发生。