zoukankan      html  css  js  c++  java
  • 如何利用 CSS 的动画原理,创作一个乒乓球对打动画

    效果预览

    在线演示

    按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

    https://codepen.io/comehope/pen/rvgLzK

    可交互视频教程

    此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

    请用 chrome, safari, edge 打开观看。

    https://scrimba.com/p/pEgDAM/cW7gZfb

    源代码下载

    本地下载

    每日前端实战系列的全部源代码请从 github 下载:

    https://github.com/comehope/front-end-daily-challenges

    代码解读

    定义 dom,容器中包含左拍、小球和右拍:

    <div class="court">
        <div class="left-paddle"></div>
        <div class="ball"></div>
        <div class="right-paddle"></div>
    </div>
    

    居中显示:

    body {
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        background: linear-gradient(silver, dimgray);
    }
    

    调整盒模型:

    * {
        box-sizing: border-box;
    }
    

    画出球案:

    .court {
         20em;
        height: 20em;
        color: white;
        border: 1em solid currentColor;
    }
    

    画出左拍:

    .court {
        position: relative;
    }
    
    .left-paddle
         1em;
        height: calc(50% - 1em);
        background-color: currentColor;
        position: absolute;
        top: 1em;
        left: 1em;
    }
    

    让左拍动起来:

    .left-paddle {
        animation: left-moving 1s linear infinite alternate;
    }
    
    @keyframes left-moving {
        to {
            transform: translateY(100%);
        }
    }
    

    类似地,画出右拍:

    .right-paddle
         1em;
        height: calc(50% - 1em);
        background-color: currentColor;
        position: absolute;
        top: 1em;
        left: 1em;
        bottom: 1em;
        right: 1em;
    }
    

    类似地,让右拍动起来:

    .right-paddle {
        animation: right-moving 1s linear infinite alternate;
    }
    
    @keyframes right-moving {
        to {
            transform: translateY(-100%);
        }
    }
    

    画出小球:

    .ball {
         100%;
        height: 1em;
        border-left: 1em solid currentColor;
        position: absolute;
        left: 2em;
        top: calc(50% - 1.5em);
    }
    

    让小球动起来:

    .ball {
        animation: bounce 1s linear infinite alternate;
    }
    
    @keyframes bounce {
        to {
            left: calc(100% - 3em);
        }
    }
    

    最后,重构一下左右拍的代码,合并共有属性:

    .left-paddle,
    .right-paddle {
         1em;
        height: calc(50% - 1em);
        background-color: currentColor;
        position: absolute;
        animation: 1s linear infinite alternate;
    }
    
    .left-paddle {
        top: 1em;
        left: 1em;
        animation-name: left-moving;
    }
    
    .right-paddle {
        bottom: 1em;
        right: 1em;
        animation-name: right-moving;
    }
    

    大功告成!

    原文地址:https://segmentfault.com/a/1190000015002553

  • 相关阅读:
    idea 设置默认的maven
    IDEA中Tomcat部署时war和war exploded区别
    所谓的SaaS服务到底是什么?
    java8 Lambda表达式
    java8 :: 用法 (JDK8 双冒号用法)
    idea 本地调试,修改代码,代码自动生效
    nacos配置中心demo
    Logparser 的用法
    android软键盘的一些控制 转来的,格式有点乱
    TranslateAnimation 使用详解
  • 原文地址:https://www.cnblogs.com/datiangou/p/9994345.html
Copyright © 2011-2022 走看看