【发布时间】:2015-03-28 00:58:38
【问题描述】:
我有一个固定的顶部导航栏,当用户滚动经过某个锚点时,它使用 javascript 函数来缩小尺寸并更改其他几种样式。我还有一个移动汉堡包图标,可将导航扩展为移动设备的全屏菜单。我希望用于缩小顶部导航的 javascript 函数在我单击汉堡包(打开菜单)时停止工作并在再次单击时恢复(关闭菜单),但是我无法启动滚动功能或停下来。
这是我目前写的代码:
<script>
var win = $(window),
nw = $('.navBgWrapper'),
sw = $('.scrollWaypoint'),
pos = sw.offset().top;
var sticky = function(){
if (win.scrollTop() > pos) {
nw.addClass('navBgWrapperChange');
$('.vjLogoWhite').removeClass('logoGo');
$('.vjLogoGreen').addClass('logoGo');
$('.navLink').removeClass('linkTop');
$('.navLink').addClass('linkScroll');
$('.navContent').on('hover', '.navLink', function () {
$('.navLink').removeClass('hoverTop');
$('.navLink').addClass('hoverScroll');
});
}
else {
nw.removeClass('navBgWrapperChange')
$('.vjLogoGreen').removeClass('logoGo');
$('.vjLogoWhite').addClass('logoGo');
$('.navLink').removeClass('linkScroll');
$('.navLink').addClass('linkTop');
$('.navContent').on('hover', '.navLink', function () {
$('.navLink').removeClass('hoverScroll');
$('.navLink').addClass('hoverTop');
});
}
}
//burger script
var sc = true;
$('.menu').click(function(){
$(this).toggleClass('open');
if (!sc) {
sc = true;
} else {
sc = false;
}
$('.menu-item').toggleClass('menuItemToggle');
$('.navMenuBg').toggleClass('navMenuBgGo');
$('.vjLogoWhite').toggleClass('logoGo');
$('.vjLogoGreen').toggleClass('logoGo');
$('.navLinks').toggleClass('navLinksShow');
});
</script>
<script>
if (sc) {
win.scroll(sticky);
}
</script>
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
你可以使用
true和false;您不必构造布尔实例。此外,直接与布尔值进行比较通常是个坏主意;只需使用if (sc)或if (!sc)。 -
我最初是这样做的,但是构造了布尔值以查看这是否无济于事...
-
那么实际使用
sc变量的代码在哪里?您发布的代码中发生的只是变量设置为一件事或另一件事。 -
非常抱歉,错过了最后一部分,添加了使用 sc 的底部代码,并按照您的建议进行了更改。
-
啊。好吧,我认为您需要检查滚动事件处理程序 inside 的标志。一旦你设置了处理程序,它就设置好了;什么都不会检查标志。但是,在处理程序内部,您可以只检查标志并在其为 false 时返回(或为 true;以您不应该滚动的情况为准)。
标签: javascript jquery css function boolean