javascript - 滚动时, Logo 颜色发生变化,但向上滚动时它保持不变

标签 javascript jquery html css scroll

我创建了一个固定的标题,在加载时, Logo 是纯白色的。在滚动时,它变为全彩色 Logo 。 但是,当滚动回顶部时,它会保持相同颜色的 Logo ,而不是返回到白色。 这是代码(和一支笔)

$(function() {
$(window).scroll(function() {    
    var navlogo = $('.nav-logo-before');
    var scroll = $(window).scrollTop();

    if (scroll >= 1) {
        navlogo.removeClass('.nav-logo-before').addClass('nav-logo-after');

    } else  {
        navlogo.removeClass('.nav-logo-after').addClass('nav-logo-before');            
    }

});

});

http://codepen.io/bradpaulp/pen/gmXOjG

最佳答案

这里有几件事:

1) 您从 .nav-logo-before 类开始,但是当 Logo 变为黑色时,您删除该类,然后尝试使用不再存在的类选择器获取相同的元素

2) removeClass('.nav-logo-before')removeClass('nev-logo-before) 不同,注意“.”在第一个选择器中。

3) 在每个滚动事件中使用 $('.selector') 获取元素,这可能是一个性能问题,最好在页面加载时缓存它们,然后使用该元素存储在内存中

4) 监听滚动事件不是一个好的做法,因为这对性能要求太高,通常最好使用 requestAnimationFrame 然后检查滚动位置是否已更改。使用滚动事件可能会发生你向上滚动得非常快并且滚动事件不会发生在 0,所以你的标志不会改变。使用 requestAnimationFrame 这不可能发生

$(function() {
    var navlogo = $('.nav-logo');
    var $window = $(window);
    var oldScroll = 0;
    function loop() { 
        var scroll = $window.scrollTop();
        if (oldScroll != scroll) {
            oldScroll = scroll;
            if (scroll >= 1) {
                navlogo.removeClass('nav-logo-before').addClass('nav-logo-after');
            } else  {
                navlogo.removeClass('nav-logo-after').addClass('nav-logo-before');      
            }
        }
        requestAnimationFrame(loop);
    }
    requestAnimationFrame(loop);
});
body {
	background-color: rgba(0,0,0,.2);
}
.space {
	padding: 300px;
}
.nav-logo-before {
    content: url(https://image.ibb.co/kYANyv/logo_test_before.png)
}

.nav-logo-after {
    content: url(https://image.ibb.co/jYzFJv/logo_test_after.png)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
	<img class="nav-logo nav-logo-before">
</div>
<div class="space">
</div>

关于javascript - 滚动时, Logo 颜色发生变化,但向上滚动时它保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42837068/

相关文章:

javascript - 如何从被拒绝的外部 “throw”博克处理的被拒绝的 promise 中,如何在 “catch”方法内 “catch”?

javascript - 不是作为 jQuery Deferred 执行的异步函数

jquery - SmartStore 风格的下拉列表

javascript - 如何在 jQuery 中创建动态表?

javascript - 是否可以混合捆绑模块和 JavaScript 模块

javascript - 获取状态 4​​00 - {"error":"invalid_grant"} 验证时

javascript - 获取元素的索引/位置及其在 Javascript 中的名称 [ DOM ]

javascript - Angular JS 自定义过滤器

javascript - 如何清除并重新填充下拉选项

javascript - Sweet Alert后的文件上传窗口