停止徽标图像在用户滚动时闪烁
Stop logo image from flickering as user scrolls
我有两个不同的徽标,我想使它们平滑地淡入淡出,并根据滚动条的位置在它们之间切换。使用我当前使用的代码,它会在图像之间切换并应用淡入淡出效果,但它会随着用户不断滚动而继续这样做,从而产生闪烁效果。目前,我有以下代码:
$(window).on('scroll', function(){
var headerHeight = $('header').outerHeight(true) / 3;
var scrollTop = $(this).scrollTop();
if(scrollTop < headerHeight){
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL01').fadeIn(200);
});
}else if (scrollTop > headerHeight){
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL02').fadeIn(200);
});
};
根据代码的结构,我明白了为什么它会产生闪烁效果;每次用户滚动时都会应用 if 语句,具体取决于滚动条的位置。但是,我就是不知道该写什么,该写在哪里才能只应用一次if语句。
如果您在每个进程执行时设置一个布尔标志,这样布尔值在执行前必须为假并在执行时变为真,那么您也可以在 if 语句中检查它,强制它只触发在滚动范围内一次。
每个进程都会重置另一个进程的布尔值,以便在用户再次返回到该滚动范围时可以再次启动另一个进程。
var img1IsFadedIn = false;
var img2IsFadedIn = false;
$(window).on('scroll', function(){
var headerHeight = $('header').outerHeight(true) / 3;
var scrollTop = $(this).scrollTop();
if(scrollTop < headerHeight && img1IsFadedIn == false){
img1IsFadedIn = true;
img2IsFadedIn = false;
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL01').fadeIn(200);
});
}else if (scrollTop > headerHeight && img2IsFadedIn == false){
img2IsFadedIn = true;
img1IsFadedIn = false;
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL02').fadeIn(200);
});
}
});
我有两个不同的徽标,我想使它们平滑地淡入淡出,并根据滚动条的位置在它们之间切换。使用我当前使用的代码,它会在图像之间切换并应用淡入淡出效果,但它会随着用户不断滚动而继续这样做,从而产生闪烁效果。目前,我有以下代码:
$(window).on('scroll', function(){
var headerHeight = $('header').outerHeight(true) / 3;
var scrollTop = $(this).scrollTop();
if(scrollTop < headerHeight){
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL01').fadeIn(200);
});
}else if (scrollTop > headerHeight){
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL02').fadeIn(200);
});
};
根据代码的结构,我明白了为什么它会产生闪烁效果;每次用户滚动时都会应用 if 语句,具体取决于滚动条的位置。但是,我就是不知道该写什么,该写在哪里才能只应用一次if语句。
如果您在每个进程执行时设置一个布尔标志,这样布尔值在执行前必须为假并在执行时变为真,那么您也可以在 if 语句中检查它,强制它只触发在滚动范围内一次。
每个进程都会重置另一个进程的布尔值,以便在用户再次返回到该滚动范围时可以再次启动另一个进程。
var img1IsFadedIn = false;
var img2IsFadedIn = false;
$(window).on('scroll', function(){
var headerHeight = $('header').outerHeight(true) / 3;
var scrollTop = $(this).scrollTop();
if(scrollTop < headerHeight && img1IsFadedIn == false){
img1IsFadedIn = true;
img2IsFadedIn = false;
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL01').fadeIn(200);
});
}else if (scrollTop > headerHeight && img2IsFadedIn == false){
img2IsFadedIn = true;
img1IsFadedIn = false;
$('.logo').fadeOut(200, function(){
$('.logo').attr('src','IMG_URL02').fadeIn(200);
});
}
});