【问题标题】:Adding transition to show-hide menu添加过渡到显示隐藏菜单
【发布时间】:2016-09-09 21:13:29
【问题描述】:

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

<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";部分不是我需要的,因为它不起作用。如何在显示和隐藏之间添加一秒钟的过渡?谢谢!

【问题讨论】:

标签: javascript transition show-hide


【解决方案1】:

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

#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

【讨论】:

    【解决方案2】:

    设置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>

    【讨论】:

    • 谢谢,这看起来很有希望,但也可以用display:none 完成吗? visibility:hidden 即使菜单应该折叠也会留下空间。
    • 也将高度设置为 0,我更新了答案以反映这一点。
    • 过渡适用于可见性和不透明度,但高度会立即减少到 0 而没有过渡?!知道是什么原因造成的吗?
    • 问题是javascript在css转换完成之前将高度设置为0,看看这个答案stackoverflow.com/a/15618028
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多