jquery - 在用户滚动时停止徽标图像闪烁
问题描述
我有两个不同的徽标,我想平滑地淡入和淡出它们,根据滚动条的位置在它们之间切换。使用我当前使用的代码,它会在图像之间切换并应用淡入淡出效果,但它会在用户不断滚动时继续这样做,从而产生闪烁效果。目前,我有以下代码:
$(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);
});
}
});
推荐阅读
- wordpress - 使用带有 elementor/divi 的 wordpress 扩展网站
- google-chrome - Vuetify:禁用 chrome 中的自动完成功能
- python - 在 COM 端口上写入和读取 bytearray
- powershell - 在不使用向上箭头的情况下获取最后执行的命令作为输出 - PowerShell
- laravel - 编辑表单中的 Select2 不会触发编辑表单中的选定值 - Livewires
- java - 如何确定纯文本编码?
- html5-video - 将 HTML 视频播放到指定时间
- laravel - 找不到类 'JasonGuru\LaravelMakeRepository\Repository\BaseRepository'
- python - 生成范围内的随机值,不应在可用值中
- c++ - 无法通过移动传递已删除的 lambda 函数?