我的jQuery脚本在IE / Safari / Firefox中没有工作



我写了一个简短的代码,该代码添加了一类,并将一类从中殿菜单中的DIV中删除。&它在Google Chrome&没有erros。

jQuery(function ($)
{
    $(window).scroll(function ()
    {
        var scroll = $(window).scrollTop();
        //>=, not <=
        if (scroll == 500)
        {
            //ADDS THE CLASS
            document.getElementById("main-header-container").className += " opened";
            document.getElementById("nav_toggle_button").className += " nav-close";
            document.getElementById("main-nav-container").className += " active";
            console.log("Nav Open");
        }
        else if (scroll <= 400)
        {
            //REMOVES THE CLASS
            $("#main-header-container").removeClass("opened");
            $("#nav_toggle_button").removeClass("nav-close");
            $("#main-nav-container").removeClass("active");
            console.log("Nav Close");
        }
    });
    );
});

浏览器不起作用&amp;Verison:

环境:WordPress网站。

我的IE版本:11.447.14393.0
我的Firefox版本:50.0.2
我的Google Chrome版本:54.0.2840.99
我的Safari版本:Microsoft Edge

我在其他Broswers上注意到的东西:

  • Nav Close正在记录&amp;当滚动点达到400时,它正在工作。
  • 什么也没有发生,也没有关于nav的日志。

只是知道我在这里做错了什么:(


它已经解决并编写了差异逻辑,这对我来说更好:)

<script type="text/javascript">
jQuery(function($){

$(window).scroll(function() {  
            var scroll = $(window).scrollTop();
                if (scroll > 0) {
                //IF SCROLL > 0
                  if ( $("#main-header-container").hasClass( "opened" ) ) {
                          //DO NOTHING IF THE CLASS IS ALREADY THERE
                     }else{
                      $("#main-header-container").addClass("opened");
                      $("#nav_toggle_button").addClass("nav-close");
                      $("#main-nav-container").addClass("active");
                                    console.log("Nav Open");
                                }
                }else if(scroll <= 200){
                    $("#main-header-container").removeClass("opened");
                    $("#nav_toggle_button").removeClass("nav-close");
                    $("#main-nav-container").removeClass("active");
                    console.log("Nav Close");
                } //END OF IF SCROLL > 0
            }); 
    });

</script>

您的代码中有流浪 );之后的滚动侦听器

    else if (scroll <= 400)
    {
        //REMOVES THE CLASS
        $("#main-header-container").removeClass("opened");
        $("#nav_toggle_button").removeClass("nav-close");
        $("#main-nav-container").removeClass("active");
        console.log("Nav Close");
    }
});
); <------

另外,WP中的jQuery以无冲突模式加载。您应该像这样包装代码:

jQuery(document).ready(function ($)
{
    //your code
)}

正确代码

jQuery(document).ready(function ($)
{
    $(window).scroll(function ()
    {
        var scroll = $(window).scrollTop();
        //>=, not <=
        if (scroll == 500)
        {
            //ADDS THE CLASS
            document.getElementById("main-header-container").className += " opened";
            document.getElementById("nav_toggle_button").className += " nav-close";
            document.getElementById("main-nav-container").className += " active";
            console.log("Nav Open");
        }
        else if (scroll <= 400)
        {
            //REMOVES THE CLASS
            $("#main-header-container").removeClass("opened");
            $("#nav_toggle_button").removeClass("nav-close");
            $("#main-nav-container").removeClass("active");
            console.log("Nav Close");
        }
    });
});

不是,您的状况似乎有些怪异。

嗡嗡声,我很好奇为什么Chrome更宽容。您确实有错误,因为脚本的第二行中有额外的);。查看Chrome中的开发人员工具并查看控制台中的错误。

另外,当它完全等于500时,您还有一个很小的窗口可以捕捉窗口滚动。这可能是有问题的。

代码建议

您正在混合JavaScript和jQuery。让我们标准化jQuery的可读性。我认为您会发现也更容易阅读和使用。

让我们使用jQuery添加和删除类属性。以下代码:

  1. 使用jQuery的.addClass().removeClass()
  2. 将DOM查找到变量中
  3. 它等到文档准备就绪。

这是您的脚本:

(function($, window, document){
    "use strict";
    var $headerContainer, $navToggle, $mainNav;
    var init = function() {
        $headerContainer = $("#main-header-container");
        $navToggle = $("#nav_toggle_button");
        $mainNav = $("#main-nav-container");
        $(window).scroll(navHandler);
    }
    var navHandler = function() {
        var scroll = $(this).scrollTop();
        if (scroll >= 500) {
            $headerContainer.addClass("opened");
            $navToggle.addClass("nav-close");
            $mainNav.addClass("active");
            console.log("Nav Open");
        } else if (scroll <= 400) {
            $headerContainer.removeClass("opened");
            $navToggle.removeClass("nav-close");
            $mainNav.removeClass("active");
            console.log("Nav Close");
        }
    }
    $(document).ready(function(){
        init();
    });
}(jQuery, window, document));

这也是JSfiddle上的一个工作演示。HTML和CSS只是虚拟占位符,可以向您展示脚本的工作。当您向下滚动阈值时,标题容器背景将绿色作为视觉指示。

jquery(function($)

您正在尝试获得$作为参数,但您不会发送此参数。因此,我建议可以在函数内部创建一些local变量$,并具有不确定的

的值

尝试制作

(function($){
  $(function(){
   $(window).scroll(function (){
     ......
   });
  });
}(jQuery)

您是否有可以用来测试的代码的小提琴?

我还注意到JavaScript className方法与jQuery removeclass One之间的混合在一起,为什么不使用一个?

这是与jQuery一起,您可以尝试一下,但是用小提琴调试会更简单。

$(function() {
    $(window).scroll(function() {  
        var scroll = $(window).scrollTop();
        // >=, not <=
        if(scroll == 500) {
            // ADD THE CLASS
            $("#main-header-container").addClass("opened");
            $("#nav_toggle_button").addClass("nav-close");
            $("#main-nav-container").addClass("active");
            console.log("Nav Open");
        } else if(scroll <= 400) {
            // REMOVE THE CLASS
            $("#main-header-container").removeClass("opened");
            $("#nav_toggle_button").removeClass("nav-close");
            $("#main-nav-container").removeClass("active");
            console.log("Nav Close");
        }
    });
});

我要在这里咬人;猜猜您的意图并建议您使用此替代代码。

我的猜测:如果少于或等于400不使用类(删除),如果更多,请使用类(添加)。

(function($) {
    $(window).scroll(function() {  
        var scroll = $(window).scrollTop();
        var isNotLess = (scroll > 400);
        $("#main-header-container").toggleClass("opened",isNotLess);
        $("#nav_toggle_button").toggleClass("nav-close",isNotLess);
        $("#main-nav-container").toggleClass("active",isNotLess);
    });
})(jQuery);// pass jQuery to the anonymous function

注意,直接回答您的问题;底线是您的原始代码有语法错误,有些浏览器似乎可以更好地处理它。

相关内容

  • 没有找到相关文章

最新更新