jQuery在按钮上添加/删除类以隐藏元素

时间:2016-01-20 19:04:40

标签: javascript jquery html css animation

单击浮动按钮或点击时,尝试使用移动页脚菜单(#mobile菜单)隐藏/显示。我可以将click事件处理程序添加到按钮(#mobile-footer-btn)中,该按钮又将一个类应用于菜单并将其设置为屏幕外的动画。

<footer id="mobile-footer">
  <div id="mobile-menu">
    <div id="mobile-footer-container">
      <div class="mobile-link">
        <a href="#" class="text-center">My Account</a>
      </div>
      <div class="mobile-link">
        <a href="#" class="text-center">Reviews</a>
      </div>
      <div class="mobile-link">
        <a href="#" class="text-center">Contact Us</a>
      </div>
    </div>
  </div>
  <div id="mobile-footer-close">
    <button id="mobile-footer-btn">
      <div class="mobile-btn-close">
        <span></span>
      </div>
    </button>
  </div>
</footer>

无论出于何种原因,我无法移除该类并将新类添加到相同的ID,这将添加一个类以再次显示该菜单。

jQuery(document).ready(function($){
    // Store menu container
    var mobileMenu = '#mobile-menu';
    // Store Trigger
    var mobileBtn = '#mobile-footer-btn';

    //Trigger closing the footer menu
    $(mobileBtn).on("click", function() {
        $(mobileMenu).addClass('mobile-menu-hide');
    });

    $('.mobile-btn-close').click(function() {
        $(this).addClass('is-rotating');
    });

    if($(mobileMenu).hasClass('mobile-menu-hide')) {
        $(mobileBtn).on("click", function(e) {
            e.stopPropagation();
            $(mobileMenu).removeClass("mobile-menu-hide").addClass("mobile-menu-show");
        });
    }
});

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

点击活动只需要一个!您的if条件永远不会被评估为true,因此永远不会触发您的onclick事件。把它放在一个onclick事件中会更好。这是代码:

jQuery(document).ready(function($){
    // Store menu container
    var mobileMenu = '#mobile-menu';
    // Store Trigger
    var mobileBtn = '#mobile-footer-btn';

    $('.mobile-btn-close').click(function() {
        $(this).addClass('is-rotating');
    });

    $(mobileBtn).on("click", function(e) {
        e.stopPropagation();
        if($(mobileMenu).hasClass('mobile-menu-hide')) {
          $(mobileMenu).removeClass("mobile-menu-hide").addClass("mobile-menu-show");
        } else {
          $(mobileMenu).removeClass("mobile-menu-show").addClass("mobile-menu-hide");
        }
    });
});

以上是这个问题:https://plnkr.co/edit/SG8eFns91wV4adxapFDB

现在考虑更好:只需切换隐藏菜单的一个类,只使用jQuery的toggleClass函数。像这样:

$(mobileBtn).on("click", function(e) {
    e.stopPropagation();
    $(mobileMenu).toggleClass('mobile-menu-hide');
});

答案 1 :(得分:0)

问题是块中的if条件只执行一次。但是,您需要在每次点击时调用它。因此,您需要将代码更新为以下

jQuery(document).ready(function($){
    // Store menu container
    var mobileMenu = '#mobile-menu';
    // Store Trigger
    var mobileBtn = '#mobile-footer-btn';

    //Trigger closing the footer menu
    $(mobileBtn).on("click", function() {
        // moved your if block inside the click handler 
        if($(mobileMenu).hasClass('mobile-menu-hide')) {

            e.stopPropagation();
            $(mobileMenu).removeClass("mobile-menu-hide").addClass("mobile-menu-show");

        } else {        
           $(mobileMenu).addClass('mobile-menu-hide');
        }
    });

    $('.mobile-btn-close').click(function() {
        $(this).addClass('is-rotating');
    });

});

答案 2 :(得分:0)

您的$(mobileBtn).on("click", function(e) { ...代码永远不会执行,因此永远不会添加点击事件处理程序,因为菜单不会以.mobile-menu-hide开头尝试此

$(mobileBtn).on("click", function(e) {
    if($(mobileMenu).hasClass('mobile-menu-hide')) {
        e.stopPropagation();
        $(mobileMenu).removeClass("mobile-menu-hide").addClass("mobile-menu-show");
    }
});