• 3D动画


    先上一道菜

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style>
     7         #box {
     8             position: relative;
     9             top: 150px;
    10             left: 600px;
    11             -webkit-transform-style: preserve-3d;
    12             -webkit-transform:rotateX(-10deg)  rotateY(400deg);
    13             -webkit-transform-origin: 100px 100px;
    14             -webkit-transition: all 5s;
    15         }
    16 
    17         #box:hover {
    18             -webkit-transform:rotateX(-10deg)  rotateY(0deg);
    19 
    20         }
    21 
    22         img {
    23             width: 200px;
    24             height: 200px;
    25             position: absolute;
    26             -webkit-transition: all 3s;
    27         }
    28 
    29         .img1 {
    30             -webkit-transform: rotateY(0deg) translateZ(180px);
    31         }
    32 
    33         .img2 {
    34             -webkit-transform: rotateY(60deg) translateZ(180px);
    35         }
    36 
    37         .img3 {
    38             -webkit-transform: rotateY(120deg) translateZ(180px);
    39         }
    40 
    41         .img4 {
    42             -webkit-transform: rotateY(180deg) translateZ(180px);
    43         }
    44 
    45         .img5 {
    46             -webkit-transform: rotateY(240deg) translateZ(180px);
    47         }
    48 
    49         .img6 {
    50             -webkit-transform: rotateY(300deg) translateZ(180px);
    51         }
    52     </style>
    53 </head>
    54 <body>
    55 <div id="box">
    56     <img src="1.jpg" class="img1 ">
    57     <img src="2.jpg" class="img2 ">
    58     <img src="3.jpg" class="img3 ">
    59     <img src="4.jpg" class="img4 ">
    60     <img src="5.jpg" class="img5 ">
    61     <img src="6.jpg" class="img6 ">
    62 </div>
    63 </body>
    64 </html>
    View Code

    效果:

    炫的刁炸天  有木有  

    另外一个效果

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style>
     7         #box {
     8             position: relative;
     9             top: 300px;
    10             left: 400px;
    11             -webkit-transform-style: preserve-3d;
    12             -webkit-transform: rotateX(-15deg) rotateY(-15deg);
    13             -webkit-transform-origin: 100px 100px;
    14             -webkit-transition: all 5s;
    15             /*perspective: 300px;*/
    16         }
    17 
    18         #box:hover {
    19             -webkit-transform: rotateX(360deg) rotateY(360deg);
    20             -webkit-transform-origin: 100px 100px;
    21         }
    22 
    23         .d {
    24             position: absolute;
    25             width: 200px;
    26             height: 200px;
    27             font-size: 96px;
    28             line-height: 200px;
    29             text-align: center;
    30             color: black;
    31             opacity: 0.6;
    32         }
    33 
    34         #box div:nth-child(1) {
    35             background: red;
    36         }
    37 
    38         div:nth-child(2) {
    39             background: blue;
    40             -webkit-transform: rotateY(-90deg) translateZ(-100px) translateX(-100px);
    41         }
    42 
    43         div:nth-child(3) {
    44             background: yellow;
    45             -webkit-transform: translateZ(-200px);
    46         }
    47 
    48         div:nth-child(4) {
    49             background: darkorange;
    50             -webkit-transform: rotateY(90deg) translateZ(-100px) translateX(100px);
    51         }
    52 
    53         div:nth-child(5) {
    54             background: lawngreen;
    55             -webkit-transform: rotateX(90deg) translateZ(-100px) translateY(-100px);
    56         }
    57 
    58         div:nth-child(6) {
    59             background: fuchsia;
    60             -webkit-transform: rotateX(90deg) translateZ(100px) translateY(-100px);
    61         }
    62 
    63         .dd {
    64             position: absolute;
    65             width: 400px;
    66             height: 400px;
    67             border: 2px solid;
    68             border-radius: 50%;
    69         }
    70 
    71         div:nth-child(7) {
    72             border-color: #33b5e5;
    73             -webkit-transform: translateZ(-100px) translateY(-100px) translateX(-100px);
    74         }
    75 
    76         div:nth-child(8) {
    77             border-color: #f65e3b;
    78             -webkit-transform: rotateY(-90deg) translateZ(100px) translateY(-100px) translateX(-100px);
    79         }
    80         div:nth-child(9){
    81             border-color: #9933cc;
    82             -webkit-transform: rotateX(90deg) translateZ(100px) translateX(-100px) translateY(-100px);
    83         }
    84     </style>
    85 </head>
    86 <body>
    87 <div id="box">
    88     <div class="d">1</div>
    89     <div class="d">2</div>
    90     <div class="d">3</div>
    91     <div class="d">4</div>
    92     <div class="d">5</div>
    93     <div class="d">6</div>
    94     <div class="dd"></div>
    95     <div class="dd"></div>
    96     <div class="dd"></div>
    97 </div>
    98 </body>
    99 </html>
    View Code

    好,下面正式开始讲,

    前言,基础这里就不懂说了,只记下自己的感悟和理解

    先看图:

    这个就是css3中 3D的坐标轴(注意上方是y的负半轴)

    先看下布置界面的代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style>
     7         *{
     8             margin: 0;
     9             padding: 0;
    10         }
    11         #box {
    12             position: relative;
    13             top: 200px;
    14             left: 500px;
    15 
    16         }
    17 
    18         .con1 {
    19             position: absolute;
    20             width: 200px;
    21             height: 200px;
    22             background: red;
    23             text-align: center;
    24             line-height: 200px;
    25             font-size: 96px;
    26             color: #1a7fdc;
    27         }
    28     </style>
    29 </head>
    30 <body>
    31 <div id="box">
    32     <div class="con1">1</div>
    33 </div>
    34 </body>
    35 </html>
    View Code

    效果:

    改装代码:

    不说别的,先给#box添加以下代码transform-style: preserve-3d;意思是为其子元素保留3D效果

    和transition: all 5s;使其有动画效果

    最终代码:

    1 #box {
    2             position: relative;
    3             top: 200px;
    4             left: 500px;
    5             transform-style: preserve-3d;
    6             -webkit-transform-style: preserve-3d;
    7             transition: all 5s;
    8             -webkit-transition: all 5s;
    9         }

    开始设置con1的3D效果

    代码修改为

     1 .con1 {
     2             position: absolute;
     3             width: 200px;
     4             height: 200px;
     5             background: red;
     6             text-align: center;
     7             line-height: 200px;
     8             font-size: 96px;
     9             color: #1a7fdc;
    10             transform: translateX(50px);
    11             -webkit-transform: translateX(50px);
    12         }

    效果不多说,con1向右移动50px

    如果改为

    1 transform: translateY(50px);

    con1会向下移动50px (注意这里不是向上)

    改为

    1 transform: translateZ(50px);

    并不能看出效果,视觉本身就直着看这z轴,所以任何向Z轴上的移动,都看不出来

    先看旋转整体图

    这是沿着每个轴的默认旋转的方向,X,Z轴是顺时针,Y轴是逆时针。其实确切说Y轴也是顺时针,只不过转的是负半轴,视觉是逆时针而已

    默认旋转基点是50% 50% 50%,可以通过transform-origin来改变

    代码改为:

    1 transform: rotateX(20deg);

    效果是高度变小。其实是旋转了。

    移动和旋转的结合,详情请看上面的第二个代码 。这里简要说理解。

    1,transform:rotateX(20deg) translateX(100px)和 transform:translateX(100px) rotateX(20deg) 两者不同,因为旋转点变化了

    2,旋转后,坐标轴也会跟着旋转。如代码

      

    1 transform: rotateY(90deg) ;

    坐标轴相应会改变为:

    这时候如果再添加以下代码

    1  transform: rotateY(90deg) translateX(100px) ;

    图形会向前移动100px,而不是向右

    吐槽,真的好难说明,感觉这个3D还是在于理解,不会的话可以自己做个骰子出来,就都会了。

  • 相关阅读:
    小程序与普通网页的区别
    小程序的结构
    Vuex四个map的方法使用
    Vuex的基本使用
    getters的使用
    nodeffi从入门到放弃(安装篇)
    nodejs如何调用c语言 (FFI)
    解决 nodegyp 错误问题
    NodeJS 调用C++(Nodeffi)
    Electron9.x +vue+ffinapi 调用Dll动态链接库
  • 原文地址:https://www.cnblogs.com/chenluomenggongzi/p/5903618.html
Copyright © 2020-2023  润新知