【问题标题】:Cannot stop javascript function with conditional statement?无法使用条件语句停止 javascript 函数?
【发布时间】: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>

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 你可以使用truefalse;您不必构造布尔实例。此外,直接与布尔值进行比较通常是个坏主意;只需使用if (sc)if (!sc)
  • 我最初是这样做的,但是构造了布尔值以查看这是否无济于事...
  • 那么实际使用 sc 变量的代码在哪里?您发布的代码中发生的只是变量设置为一件事或另一件事。
  • 非常抱歉,错过了最后一部分,添加了使用 sc 的底部代码,并按照您的建议进行了更改。
  • 啊。好吧,我认为您需要检查滚动事件处理程序 inside 的标志。一旦你设置了处理程序,它就设置好了;什么都不会检查标志。但是,在处理程序内部,您可以只检查标志并在其为 false 时返回(或为 true;以您不应该滚动的情况为准)。

标签: javascript jquery css function boolean


【解决方案1】:

详情请参阅问题的 cmets,谢谢 Pointy。

var sticky = function(){ if (!sc) { return; } else {...}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2023-04-01
    相关资源
    最近更新 更多