Dropdown菜单上的jQuery Slidedown的Vanilla JS版本

时间:2016-05-20 04:37:24

标签: javascript html css

我正在寻找一种在Vanilla Javascript中添加jQuery滑动效果的简单方法。这尤其困难,因为它位于下拉菜单中。

目前,我所使用的js将一类活动应用于li onclick。我显然能够显示和隐藏内容,但唯一缺少的是slideDown效果。

我已尝试使用CSS进行此操作但似乎无法在不声明固定高度的情况下执行此操作。

另外,如果您要附加代码,请使用jsfiddle,因为jsbin已锁定在我的机器上。

这是标记:

<nav id="main-nav">
    <ul>
        <li class="main-menu-li_dropdown">
            <a href="">link</a>
            <ul class="sub-nav">
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
            </ul>
        </li>
        <li class="main-menu-li_dropdown">
            <a href="">link</a>
            <ul class="sub-nav">
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
            </ul>
        </li>
        <li class="main-menu-li_dropdown">
            <a href="">link</a>
            <ul class="sub-nav">
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
            </ul>
        </li>
        <li class="main-menu-li_dropdown">
            <a href="">link</a>
            <ul class="sub-nav">
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
            </ul>
        </li>
        <li class="main-menu-li_dropdown">
            <a href="">link</a>
            <ul class="sub-nav">
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
            </ul>
        </li>
    </ul>
</nav>

更新: 以下是当它上面的li通过JS应用了.active类时,应用于下拉.sub-nav类的CSS

        .sub-nav {
            max-height: 0;
            position: static;
            -webkit-transition: all 500ms linear;
            -moz-transition: all 500ms linear;
            -o-transition: all 500ms linear;
            transition: all 500ms linear;
        }


.main-menu-li_dropdown.active .sub-nav {
            position: static;
            overflow-y: hidden;
            max-height: 500px; /* approximate max height */

            transition: max-height 500ms linear;
        }

2 个答案:

答案 0 :(得分:3)

这是你可以尝试的

&#13;
&#13;
.slider {
	overflow-y: hidden;
	max-height: 500px; /* approximate max height */

	transition-property: all;
	transition-duration: .5s;
}

.slider.closed {
	max-height: 0;
}
&#13;
<div style="width: 200px;">
		<div class="slider" id="slider">
			<ul class="sub-nav">
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
                <li><a href="">link</a></li>
            </ul>
		</div>
	</div>
<button onclick="document.getElementById('slider').classList.toggle('closed');">Toggle slider</button>
&#13;
&#13;
&#13;

以下是https://dev.twitter.com/solutions/customer-service链接

答案 1 :(得分:1)

仅使用CSS向上/向下滚动的快速答案:

/ *隐藏* /

#element {
    transition : 180ms transform ease-out;
    transform  : translateY(-100%);         
}

/ *显示* /

#element.displayed {
    transform  : translateY(0);
    transition : 150 transform ease-in;
}

注意:这最适合元素大小不影响其他元素大小的情况。 例如:垂直子菜单。

相关问题