其他分享
首页 > 其他分享> > 过渡,变换与动画

过渡,变换与动画

作者:互联网

过渡transition

  通常,我们的css样式是静态的,也就是说css中定义的属性就是页面渲染后的最终呈现效果。但发生像为某个元素设置:hover伪类并且此时改变一些属性(鼠标悬停在该元素时样式生效),或者使用JavaScript修改页面的某些元素的style这类操作,如果我们为该元素的一个或多个css属性中设置了过渡,那么当它们发生改变时,它会由初始值相对缓慢地变成新值,而不是直接变成新值,其中过渡的中间效果由浏览器实现。简写属性transition依次接收四个参数:

 

 一个过渡高度值的菜单

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .dropdown_toggle{
            display: block;
            padding: 0.5em 1em;
            border: 1px solid hsl(280,10%,80%);
            color: hsl(280,30%,60%);
            background-color: white;
            text-decoration: none;
            transition: background-color 0.2s linear;
        }
        .dropdown_toggle:hover{
            background-color: hsl(280,15%,95%);
        }
        .dropdown_drawer{
            position: absolute;
            background-color: white;
            width: 150px;
            height: 0;  /*关闭状态下高度为0,且溢出部分隐藏*/
            overflow: hidden;
            transition: height 1s ease-out;  /*为高度添加过渡属性*/
            text-align: center;
        }
        .dropdown.is-open .dropdown_drawer{ /*打开状态时的高度由内容确定*/
            height: auto; 
        }
        .menu{
            padding-left: 0;
            margin: 0;
            list-style: none;
        }
        .menu >li+li >a{
            border-top: 0;
        }
        .menu>li>a{
            display: block;
            padding: 0.5em 1em;
            color: hsl(280,40%,60%);
            background-color: white;
            text-decoration: none;
            transition: all .2s linear;
            border: 1px solid hsl(280,10%,80%);
        }
        .menu>li>a:hover{
            background-color: hsl(280,15%,95%);
            color: hsl(280,25%,10%);
        }
    </style>
</head>
<body>
    <div class="dropdown" aria-haspopup="true">
        <button class="dropdown_toggle" style="width: 150px">Menu</button>
        <div class="dropdown_drawer">
            <ul class="menu" role="menu">
                <li role="menuitem">
                    <a href="/features">Features</a>
                </li>
                <li role="menuitem">
                    <a href="/pricing">Pricing</a>
                </li>
                <li role="menuitem">
                    <a href="/support">Support</a>
                </li>
                <li role="menuitem">
                    <a href="/about">About</a>
                </li>
            </ul>
        </div>
    </div>

</body>

<script type="text/javascript">
    (function (){
       var toggle = document.getElementsByClassName('dropdown_toggle')[0];
       var dropdown = toggle.parentElement;
       var drawer = document.getElementsByClassName('dropdown_drawer')[0];
       var height = drawer.scrollHeight 

       toggle.addEventListener('click',function (e){
           e.preventDefault();
           dropdown.classList.toggle('is-open');  //点击后,为.dropdown添加.is-open类,表示菜单打开状态
           if(dropdown.classList.contains('is-open')){
               drawer.style.setProperty('height',height+'px');//打开状态时精确设置高度值
           }else {
               drawer.style.setProperty('height','0')//关闭状态时高度设置为0,可以实现关闭时的滑动效果
           }
       });
    }());
</script>
</html>

   我们想让用户在点击菜单时,菜单项滑动打开,也即高度由0过渡到菜单项内容占据的高度。但由于并不清楚菜单项容器的高度是多少,一开始我想让高度值由0过渡到auto,但发现过渡不生效。因此,使用JavaScript获取容器的scrollHeight属性值,来计算容器的高度,然后在菜单被点击时修改.is-open状态下容器的高度,这样就能使高度由0过渡到确切值。

 

标签:动画,dropdown,变换,transition,color,toggle,过渡,280
来源: https://www.cnblogs.com/evil-shark/p/16530561.html