【问题标题】:Transition for a Collapse崩溃的过渡
【发布时间】:2017-09-02 14:11:01
【问题描述】:

我正在开发自定义折叠器,但我不知道如何在隐藏时进行转换。
在线搜索我发现“显示:无;”,但它不支持过渡。
我试过做 height: auto;然后高度:0px;但它也不支持过渡。

代码如下:

HTML

<a class="clp" href="#clp-1"><div>Button</div></a>
<div class="clp-body clp-show" id="clp-1">Lorem ipsum</div>

CSS

 .clp > div {
  border: 1px solid black;
  border-radius: 3px;
  width: 150px;
  padding: 5px;
}

.clp {
  text-decoration: none;
  font-family: Verdana;
  color: black;
}

.clp-body {
  border: 1px solid black;
  border-radius: 3px;
  width: 150px;
  padding: 5px;
  margin-top: 5px;
  transition: all 0.5s ease;
}

.clp-show {
  opacity: 1;
}

.clp-show {
  opacity: 0;
  display: none; /* Only for the example */
}

JS (jQuery)

 $('a.clp').click(function(){
  var value = $(this).attr("href");
  if ($('div'+(value)).hasClass('clp-show')) {
    $('div'+(value)).addClass('clp-hide');
    $('div'+(value)).removeClass('clp-show');
  }
  else {
    $('div'+(value)).removeClass('clp-hide');
    $('div'+(value)).addClass('clp-show');
  };
});

这是一个链接:https://codepen.io/Keyon/pen/937706ce73bc3f68cbeff6dd6faf6c87

【问题讨论】:

  • 你想要什么类型的过渡?您可能正在寻找 jQuery 的 slideUp() 和 slideDown() 函数。文档here.
  • @JosephBeard 我也试过了,但它有一个奇怪的行为Codepen
  • 看起来奇怪的行为是由 CSS 过渡与 slideUp 或 slideDown 一起使用引起的。如果您从 CSS 中删除 transition: all 0.5s ease;,则滑动可以正常工作。
  • @JosephBeard 好的,谢谢! :)
  • @JosephBeard 添加您的评论作为答案,以便我将其标记为有效解决方案

标签: jquery html css collapse


【解决方案1】:

为什么不使用 Jquery 的 Fade 或 Slide 动画,您可以使用 animate 功能制作自己的动画。

淡出:

 $('div'+(value)).fadeIn();
 $('div'+(value)).fadeOut();

幻灯片:

 $('div'+(value)).slideUp();
 $('div'+(value)).slideDown();

创建自己的动画:

  $('div' + (value)).animate({
      //some css propeties example:
      margin-right: 500px
  }, 5000, function() {
    // Animation complete.
  });

【讨论】:

    【解决方案2】:

    您可以使用 jQuery 的 slideDown()slideUp() 并像这样展开和折叠您的 div:

    $('#clp-1').slideDown(); // expand
    $('#clp-1').slideUp(); // collapse
    

    您还需要删除 CSS 行 transition: all 0.5s ease; 以使 jQuery 滑动正常工作。

    【讨论】:

    • 你什么时候会slideUp()slideDown()?检查我的答案,它将为您提供最理想的方式来实现您的行为。如果你真的想采用 jQuery 方式,那么请分别使用 $.toggle() 而不是 slideUp()slideDown()。理想的是使用 CSS 切换类和过渡
    【解决方案3】:

    过渡不适用于高度,您需要使用最大高度。使用下面的 CSS。

    .clp-body {
        max-height: 0; /* set the initial height to 0 */
        transition: max-height .5s ease-in; /* define the transition */
    }
    .clp-show {
        max-height: 1000px; /* set it to some high value but it will not expand more than the content height */
    }
    

    点击.clp切换clp-show

    $(".clp").on("click", function () {
        $(".clp-body").toggleClass("clp-show");
    });
    

    编辑: 您不需要display:none,因为我们最初设置的是max-height: 0

    【讨论】:

      【解决方案4】:

      您可以使用 jQuery 为 css 属性设置动画。

      $('a.clp').click(function() {
          var value = $(this).attr("href");
          var targetDiv = $('div' + (value));
          targetDiv.toggleClass('clp-show');
          if (targetDiv.hasClass('clp-show')) {
             targetDiv.css('display', 'block');
             targetDiv.animate({
               opacity: 1
             }, 500);
      
          } else {
             targetDiv.animate({
               opacity: 0
             }, 500, function() {
               // This will be executed when the animation is complete
               targetDiv.css('display', 'none');
             });
          }
      });
      

      这是更新后的codepen。我也对 CSS 做了一些改动。通过这种方式,我们确保它的动画效果很好,然后在过渡完成后消失。否则可能会阻塞一些鼠标事件并影响其他元素。

      更新

      这是用于折叠的 jQuery (codepen):

      $('a.clp').click(function() {
          var value = $(this).attr("href");
          var targetDiv = $('div' + (value));
          targetDiv.toggleClass('clp-show');
          targetDiv.slideToggle(500);
      });
      

      您不需要在此处切换类,但我留下了它以防您想更改其他 CSS 属性。

      【讨论】:

      • 好的,但是你知道如何使用“折叠动画”吗?不要使用不透明度,而是使用高度之类的东西。
      • 另外,请考虑 codepen 中的 css 更改。
      【解决方案5】:

      使用这些类属性可能是可行的

      .clp-show {
        opacity: 1;
        height:auto;
        overflow:visible;
      }
      
      .clp-show {
        opacity: 0;
        height:0;
        overflow:hidden;
      }

      【讨论】:

        【解决方案6】:

        height 属性上使用 CSS 动画。

        div #hidingDiv {
            height: 50px
            width: 50px
        }
        @keyframes shrinkup {
            from {
                height: 50px
            }
            to {
                height: 0px
            }
        

        当你想让它消失时:

        document.getElementById("hidingDiv").setAttribute("style", "animation-name: shrinkup; animation-duration: 5s")
        

        这只是在您运行 JavaScript 代码时在 div 上设置动画。

        【讨论】:

        • 我不想使用静态高度,这就是问题所在:/
        【解决方案7】:
        .slideToggle()
        

        它结合了:.toggle() + .slideUp() + .slideDown()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-15
          • 1970-01-01
          • 2017-09-29
          • 2019-05-14
          • 2023-02-08
          • 1970-01-01
          相关资源
          最近更新 更多