zoukankan      html  css  js  c++  java
  • 如何不用 transition 和 animation 也能做网页动画

    效果预览

    在线演示

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

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

    可交互视频教程

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

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

    https://scrimba.com/c/crvq8hq

    源代码下载

    本地下载

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

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

    代码解读

    定义 dom,一个容器中包含 4 个子元素,每个子元素的内容就是一堆斜线:

    <div class="frame">
        <div class="wall top"><marquee>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</marquee></div>
        <div class="wall right"><marquee>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</marquee></div>
        <div class="wall bottom"><marquee>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</marquee></div>
        <div class="wall left"><marquee>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</marquee></div>
    </div>
    

    居中显示:

    body {
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    

    定义容器尺寸:

    .frame {
         100vmin;
        height: 100vmin;
        background-color: whitesmoke;
    }
    

    隐藏超出容器的内容:

    .wall {
        overflow: hidden;
    }
    

    把 4 个元素向四个方向旋转,互相垂直:

    .wall {
        transform-origin: 0 0;
    }
    
    .wall.top {
        transform: rotate(0deg);
    }
    
    .wall.right {
        transform: rotate(90deg);
    }
    
    .wall.bottom {
        transform: rotate(180deg);
    }
    
    .wall.left {
        transform: rotate(270deg);
    }
    

    定位它们,形成一个正方形:

    .frame {
        position: relative;
    }
    
    .wall {
        position: absolute;
         100%;
    }
    
    .wall.top {
        top: 0;
        left: 0;
    }
    
    .wall.right {
        top: 0;
        left: 100%;
    }
    
    .wall.bottom {
        top: 100%;
        left: 100%;
    }
    
    .wall.left {
        top: 100%;
        left: 0;
    }
    

    对 4 个元素进行 3d 旋转:

    .frame {
        perspective: 40vmin;
    }
    
    .wall.top {
        transform: rotate(0deg) rotateX(-90deg);
    }
    
    .wall.right {
        transform: rotate(90deg) rotateX(-90deg);
    }
    
    .wall.bottom {
        transform: rotate(180deg) rotateX(-90deg);
    }
    
    .wall.left {
        transform: rotate(270deg) rotateX(-90deg);
    }
    

    把斜线加粗、放大:

    .wall {
        font-size: 75vmin;
        font-weight: bold;
    }
    

    最后,把 dom 中的斜线用 <marquee> 标签包围起来:

    &lt;div class="frame"&gt;
        &lt;div class="wall top"&gt;&lt;marquee&gt;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;/marquee&gt;&lt;/div&gt;
        &lt;div class="wall right"&gt;&lt;marquee&gt;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;/marquee&gt;&lt;/div&gt;
        &lt;div class="wall bottom"&gt;&lt;marquee&gt;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;/marquee&gt;&lt;/div&gt;
        &lt;div class="wall left"&gt;&lt;marquee&gt;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;/marquee&gt;&lt;/div&gt;
    &lt;/div&gt;
    

    大功告成!

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

  • 相关阅读:
    springcloud学习(五)之GateWay
    springcloud学习(四)之Feign
    springcloud学习(三)之Hystrix
    springcloud学习(二)之Ribbon
    springcloud学习(一)之Eureka
    关于ES6尾调用优化
    CSS常考知识点
    Chrome动画调试最佳实践
    HTML常考知识点
    代码之旅:基础规范
  • 原文地址:https://www.cnblogs.com/datiangou/p/9994297.html
Copyright © 2011-2022 走看看