首先,我想说我读过这篇文章:
CSS3 transition only when class is added, not when removed
而解决办法对我也不起作用。我有一个导航,当浏览器位于小断点内时隐藏,当单击某个元素时显示。单击元素可以通过jQuery添加类。打开后,会有一个关闭按钮,单击该按钮将删除类。类正在按预期进行加减运算,但由于某些原因,转换仅在添加.open类时有效,而不是在删除它时有效。这是我的代码:
HTML格式:

<div class="menu-main-nav-container">
    <ul id="menu-main-nav" class="menu">
        <li id="menu-item-40" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-40"><a href="http://blackandwright.com/what-we-do">What We Do</a></li>
        <li id="menu-item-41" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-41"><a href="http://blackandwright.com/team">Team</a></li>
        <li id="menu-item-42" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-42"><a href="http://blackandwright.com/case-studies">Case Studies</a></li>
        <li id="menu-item-102" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-102"><a href="http://blackandwright.com/what-next">What Next?</a></li>
        <li id="menu-item-104" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-104"><a href="#contact">Contact</a></li>
        <li id="menu-item-122" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-122"><a href="#close">Close</a></li>
    </ul>
</div>

CSS(指南针+Sass):
#menu-main-nav {
    @include single-transition(opacity, 0.3s, ease-in-out);

    opacity: 0;
    position: absolute;
    top: -27px;
    left: 0px;
    height: 0;
    overflow: hidden;
    z-index: 5000;

    &.open {
        opacity: 1;
        height: auto;
    }
}

CSS(已编译):
#header #menu-main-nav {
  transition: opacity 0.3s ease-in-out;
  opacity: 0;
  position: absolute;
  top: -27px;
  left: 0px;
  height: 0;
  overflow: hidden;
  z-index: 5000;
}
#header #menu-main-nav.open {
  opacity: 1;
  height: auto;
}

查询:
$('body').on('click', '.menu-main-nav-container', function(e) {
        if(!$mobileNav.hasClass('open')) {
            $mobileNav.addClass('open');
        }
    }).on('click', '.nav-close', function(e) {
        if($mobileNav.hasClass('open')) {
            $mobileNav.removeClass('open');
        }
    })
});

我在这里被难住了。请记住,我使用的是指南针,而且最初的转换是按预期工作的。

最佳答案

正如注释中提到的,问题是当类被移除时,height: 0会立即隐藏元素。不透明度仍然会变换,但你看不到它。
不幸的是,由于height: auto不是一个可传递的值,因此为转换添加高度并没有帮助。如果在开放类不存在时设置了延迟,则可以在固定高度下执行此操作,但在添加时删除延迟。

var $menu = $('#menu-main-nav');
setInterval(function() {
    $menu.toggleClass('open');
}, 2000);

#menu-main-nav {
    background: grey;
    overflow: hidden;
    height: 0;
    opacity: 0;
    transition: opacity 1s, height 0s 1s;
}
#menu-main-nav.open {
    height: 300px;
    opacity: 1;
    transition: opacity 1s, height 0s;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="menu-main-nav-container">
    <ul id="menu-main-nav" class="menu">
        <li><a href="#">What We Do</a></li>
        <li><a href="#">Team</a></li>
        <li><a href="#">Case Studies</a></li>
        <li><a href="#">What Next?</a></li>
        <li><a href="#contact">Contact</a></li>
        <li><a href="#close">Close</a></li>
    </ul>
</div>

作为fixedheight的替代方法,如果在展开时不依赖于元素的布局,则可以使用可传递的visibility(好吧,无论如何都可以通过转换来延迟它),使用上述相同的技术。
var $menu = $('#menu-main-nav');
setInterval(function() {
    $menu.toggleClass('open');
}, 2000);

#menu-main-nav {
    background: grey;
    opacity: 0;
    visibility: hidden;
    transition: opacity 1s, visibility 0s 1s;
}
#menu-main-nav.open {
    opacity: 1;
    visibility: visible;
    transition: opacity 1s, visibility 0s;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="menu-main-nav-container">
    <ul id="menu-main-nav" class="menu">
        <li><a href="#">What We Do</a></li>
        <li><a href="#">Team</a></li>
        <li><a href="#">Case Studies</a></li>
        <li><a href="#">What Next?</a></li>
        <li><a href="#contact">Contact</a></li>
        <li><a href="#close">Close</a></li>
    </ul>
</div>

但是,这意味着元素将始终保持相同的高度。如果确实需要元素具有可变高度,可以使用JavaScript计算目标高度,并在动画期间将其设置为固定高度。

关于javascript - CSS过渡在添加类时起作用,但不能将其删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31215396/

10-12 12:18
查看更多