【问题标题】:jquery menu animation close/openjquery菜单动画关闭/打开
【发布时间】:2016-06-03 14:42:58
【问题描述】:

我正在尝试在打开和关闭时实现动画,但在菜单之间切换时没有动画。

在菜单之间切换 = 不,不设置动画

打开和关闭菜单=动画(打开时向上滑动/关闭时向下滑动)

我拥有以上所有内容 - except 动画关闭。有没有人有任何建议可以让我摆脱这个洞!

(要关闭菜单,请在 FirstSecond 菜单链接上单击 2 次,一次打开,一次关闭)

这是我的DEMO

我的 jQuery

$('.pack__button--each').each(function() {
  var $dropdown = $(this);

  $(".pack__button", $dropdown).click(function(e) {
    e.preventDefault();
    if ($('.stickers__content').is(':visible')) {
      var $div = $(".stickers__content", $dropdown);
      $div.toggle(); 
      $(".stickers__content").not($div).hide();
      return false;
    } else {
      var $div = $(".stickers__content", $dropdown);
      $div.animate({
                height: "toggle",
                opacity: "toggle"
      }, "fast"); 
      $(".stickers__content").not($div).hide();
      return false;
    }    
  });
});

【问题讨论】:

    标签: javascript jquery html menu


    【解决方案1】:
    var clicked;
    $('.pack__button--each').each(function() {
      var $dropdown = $(this);
      $(".pack__button", $dropdown).click(function(e) {
        e.preventDefault();
        if ($('.stickers__content').is(':visible')) {
          var $div = $(".stickers__content", $dropdown);
          if(clicked != $('.pack__button').index(this)) {
            $div.toggle(); 
          } else {
            $div.slideToggle(); 
          }
          $(".stickers__content").not($div).hide();
          clicked = $('.pack__button').index(this);
          return false;
        } else {
          var $div = $(".stickers__content", $dropdown);
          $div.animate({
                    height: "toggle",
                    opacity: "toggle"
          }, "fast"); 
          $(".stickers__content").not($div).hide();
          clicked = $('.pack__button').index(this);
          return false;
        }    
      });
    });
    

    我正在计算您单击了哪个菜单项并将其保存为 clicked 变量。当您再次单击菜单项时,它会检查是否是最后一次单击的项目并运行切换或滑动切换。

    【讨论】:

    • 感谢您的解释欺诈.eel!很好的解决方案,谢谢:)
    【解决方案2】:

    你可以在没有 jQuery 的动画的情况下做到这一点,只使用 CSS(只使用 jQuery 来切换类):DEMO

    CSS:

    .stickers__content {
          position: absolute;
          bottom: 60px;
          left: 0;
          display: block;
          width: 100vw;
          height: 125px;
          background-color: rgba(0, 0, 0, 0.7);
          overflow-x: auto;
          white-space: nowrap;
          transition:.2s;
          transition-property:transform, opacity;
          transform:scaleY(0);
          transform-origin:bottom center;
          opacity:0;
        }
        .stickers__content.open{
          transform:scaleY(1);
          opacity:1;
        }
    

    jQuery:

    $('.pack__button--each').each(function() {
      var $dropdown = $(this);
    
      $(".pack__button", $dropdown).click(function(e) {
          var content=$(this).parent().find('.stickers__content');
        content.toggleClass('open');
        $('.stickers__content').not(content).removeClass('open')
      });
    });
    

    【讨论】:

    • 感谢@AminJafari 不幸的是,这不太奏效,当我尝试使用您的 Fiddle 时,每次点击都会同时打开两个菜单
    • 酷 :) 这仍然不是一个解决方案,这就是我试图避免的事情。在菜单之间单击时,为它们设置动画并不好,因为它看起来很糟糕。它不平滑。我试图在菜单之间切换时简单地打开/关闭它们。就像我现在做的一样。并且仅在关闭所有菜单时为它们设置动画(向上/向下滑动)。我的工作就像我想要的那样,除了关闭所有菜单时它没有动画......
    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2016-07-21
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多