【问题标题】:jQuery toggle class and change it on clickjQuery切换类并在单击时更改它
【发布时间】:2015-06-16 14:12:23
【问题描述】:

我的 JS 文件中有以下代码:

jQuery("document").ready(function (e) {
        var menu = e(".menu-container");
        var button = e(".menu-functions");
        e(window).scroll(function () {
                if (e(this)
                    .scrollTop() > 150) {
                    menu.addClass("f-nav");
                    button.addClass("collapse-expand");
                    button.addClass('collapse');
                } else {
                    menu.removeClass("f-nav");
                    button.removeClass("collapse");
                    button.removeClass("expand");
                    button.removeClass("collapse-expand");
                }
            });
        //problem area
        $('#menu-functions').click(function(){
            if(button.hasClass('collapse'))
            {
                button.addClass('expand');
                button.removeClass('collapse');
            }
            if(button.hasClass('expand'))
            {
                button.addClass('collapse');
                button.removeClass('expand');
            }
        });
});

现在我需要让// problem area 下的部分开始工作。我认为 jQuery 中有一个 toggleClass,对吧?一些高级条件可以解决问题,但是我仍在学习,我需要一些帮助。无论按钮状态是展开还是折叠,我还需要找到animate() .menu-container div 的方法:

  • 如果按钮在具有expand 类时被单击
    • 用 98 像素从下到上为菜单设置动画;
  • 如果按钮在具有collapse 类时被单击
    • 使用 98 像素从上到下为菜单设置动画。

编辑 - JSFIDDLE: jsfiddle.net/rcdhnh7L

【问题讨论】:

  • Jsfiddle 以便更好地理解......

标签: javascript jquery html css menu


【解决方案1】:

试试这样吧。不要使用 e 作为 jQuery 的 var,这很奇怪。而且我简化了问题区域,直接抓取你想要的元素,而不是迭代现有的集合。

jQuery("document").ready(function ($) {
    var menu = $(".menu-container");
    var button = $(".menu-functions");
    $(window).scroll(function () {
        if ($(this)
            .scrollTop() > 150) {
            menu.addClass("f-nav");
            button.addClass("collapse-expand");
            button.addClass('collapse');
        } else {
            menu.removeClass("f-nav");
            button.removeClass("collapse");
            button.removeClass("expand");
            button.removeClass("collapse-expand");
        }
    });
    //problem area
    $('#menu-functions').click(function () {
        $('.menu-functions.collapse').addClass('expand').removeClass('collapse');
        $('.menu-functions.expand').addClass('collapse').removeClass('expand');
    });
});

或者这也应该有效:

        //problem area
        $('#menu-functions').click(function () {
            $('.menu-functions.collapse, .menu-functions.expand').toggleClass('expand collapse');
        });

【讨论】:

  • Uuum... 此代码包含语法错误。看看这个.removeClass('expand')...
  • @Charlie 也许我没有喝足够的咖啡……我没看到。有什么问题?
  • 哦,删除. 之前的空格并将其放在上面的行中修复了它!但是按钮的类仍然没有改变......
  • 哦,奇怪...我会把它放在答案的一行
  • @Charlie 删除了空白 JIC,并添加了替代解决方案
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2016-03-24
相关资源
最近更新 更多