zoukankan      html  css  js  c++  java
  • CSS 动画学习笔记——Transition篇

    该笔记中,主要记录CSS动画的:transition animation

    一丶Transition

    transition 从它本身的意思来说就是 过渡,在css3引入transition前,css的状态变化都是即时完成的,例如我们平时若是不使用UI库的情况下,做类似于折叠面板的组件时,我们通常会用display的none和block来进行显示&隐藏的控制;有时用到伪类或者点击进行即时样式更改,页面上的效果也是即时变化,通常是没有动画过渡效果,如下例:

    注释:这是一个通过点击控制高度变化的块

     

     身为前端,当然是想做一些页面效果好的东西,而我们就可以通过 transition 对上面进行改进,效果如下:

    注释:这是添加了transition之后的效果

     

     实现上述的代码如下:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <style type="text/css">
            .block_wrap {
                width: 500px;
                height: 500px;
                background: #e3e3e3;
                /*设置动画过渡时间和其所需要的过渡的属性*/
                transition: 1s height; 
                margin: 0 auto;
            }
            /*通过点击事件添加/删除该样式进行高度控制*/
            .pick {
                height: 100px
            }
        </style>
    </head>
    <body>
        <div id="block_wrap" class="block_wrap">
        </div>
    </body>
    <script type="text/javascript">
        // 获取标题元素
        var block_wrap = document.getElementById('block_wrap')
    
        //给标题元素添加点击事件,通过点击控制class的添加&去除达成动画效果
        block_wrap.onclick = function() {
            // 获取标题元素className集合
            let classArray = this.className.split(/s+/)
    
            if (classArray.includes('pick')) {
                block_wrap.classList.remove('pick')
                return
            } else {
                block_wrap.classList.add('pick')
                return
            }
        }
    </script>
    </html>

    如若我们需要动画效果的不止高度呢?那也可以,可以将样式代码改成这样

     1 .block_wrap {
     2     width: 500px;
     3     height: 500px;
     4         background: #e3e3e3;
     5     /*可以设置多个属性,并且每个属性的过渡时间都可不同*/
     6         transition: 1s height, 0.5s width; 
     7     margin: 0 auto;
     8 }
     9 /*通过点击事件添加/删除该样式进行高度&宽度控制*/
    10 .pick {
    11     height: 100px;
    12     width: 100px
    13 }

    改进之后的效果:

    注释:点击时,控制高度&宽度变化

    ·transition-delay

    还有更加花里胡哨一些的,可以让动画效果延迟(delay),效果见下图:

    注释:宽度延迟

    使用延迟只需将代码修改一下:

    1 /*第一个时间为动画时间,第二个时间为延迟时间,不设置则为0*/
    2 transition: 1s height, 1s 1s width; 

    delay的应用场景在于一些比较复杂的动画,可以通过它指定执行顺序来完成。 

    ·transition-timing-function

    transition的状态变化速度(又称timing-function),默认逐渐放慢(ease),其他模式为:

    • linear 匀速
    • ease-in 加速
    • ease-out 减速
    • cubic-bezier函数  自定义速度模式

    如若使用cubic-bezier,可以访问该网站 https://cubic-bezier.com/ 进行定制

    transition总结

    transition简写:

    /*第一个参数为动画时间,第二个为延迟(delay),第三个为动画效果的属性,第三个为状态变化速度(timing-function),另外可以单独定义每个属性*/
    transition: 1s 1s height ease;
    transition: 1s 1s height ease, 1s 1s width ease;

    transition各属性:

    /*动画效果属性*/
    transition-property: height;
    /*动画时间*/
    transition-duration: 1s;
    /*延迟*/
    transition-delay: 1s;
    /*timing-function*/
    transition-timing-function: ease;

    常见的动画效果,都可以用transition来完成,一些复杂的动画则需要各属性的配合。 

    目前主流的浏览器都已经兼容transition,但是要注意,并不是所有的CSS属性都支持transition,而且在使用transition时,要明确地给出开始到结束的数值,也就是要明确0-100,或者100-0,否则,transition无法计算中间状态。

  • 相关阅读:
    (项目实战三)响应式首页内容介绍
    (项目实战二)响应式轮播图
    (一)简介
    (项目实战一)响应式导航
    HttpURLConnection 411错误解决
    JMeter使用(Linux)
    性能测试工具比较
    Java常见加密算法
    HttpURLConnection发送请求
    Java AES加密案例
  • 原文地址:https://www.cnblogs.com/zhichong/p/13560108.html
Copyright © 2011-2022 走看看