繁体   English   中英

向显示隐藏菜单添加过渡

[英]Adding transition to show-hide menu

我有一个相当简单的菜单,可以按预期工作,但我只是不知道如何为其添加过渡,使其看起来更流畅。 这是我所拥有的:

<script type="text/javascript">
function showhide(id) {
    var e = document.getElementById(id);
    e.style.display = (e.style.display == 'block') ? 'none' : 'block';
    e.style.transition = "all 1s";
 }
</script>


<a href="javascript:showhide('SERIES')">
    <div class="search-menu-maincategory">
        Maincategory to click on
    </div>
</a>

<div id="SERIES">
    <div class="search-menu-subcategory">
        One of the subcategories to show and hide
    </div>
</div>

显然 e.style.transition = "all 1s"; 部分不是我需要的,因为它不起作用。 如何在显示和隐藏之间添加一秒钟的过渡? 谢谢!

两件事:您不能在显示属性上进行转换,而是使用可见性和不透明度。

#foo { transition-property: visibility, opacity; transition-duration: 0, 1s; }

#foo.hidden { opacity: 0; visibility: hidden; transition-property: opacity, visibility; transition-duration: 1s, 0; transition-delay: 0, 1s; }

我建议使用 css 类名来控制显示/隐藏,否则您将不得不编写一个使用请求动画帧函数重绘窗口的函数,以便动画实际显示,否则您将不会有转换https://developer.mozilla。 org/en-US/docs/Web/API/window/requestAnimationFrame

设置height: 0应该可以解决您的块问题

 function showhide(id) { var e = document.getElementById(id); e.classList.toggle("m-fadeOut"); }
 .m-fadeOut { visibility: hidden; opacity: 0; height: 0; transition: visibility 0s linear 300ms, opacity 300ms, height 300ms; }
 <a href="javascript:showhide('SERIES')"> <div class="search-menu-maincategory"> Maincategory to click on </div> </a> <div id="SERIES"> <div class="search-menu-subcategory"> One of the subcategories to show and hide </div> </div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM