zoukankan      html  css  js  c++  java
  • CSS3之_迷之transform

    这段时间学习css3的时候,想用transfrom以及transition做一个简单的正方体旋转,然后。。就晕倒在坐标系这块。

    一直以为坐标轴是永恒不变的,(z正轴是指向屏幕外的方向,y是垂直方向,x是水平方向)。

    然后我的愉快的开始做正方体,发现WTF!这根本没按照我的想法走。剧本不是这么写的。

    于是有了这段知识(见下文——摘自:http://www.tuicool.com/articles/2muqU3


    我们都可能像 transform: rotateY(45deg) translateX(100px); 这样使用多个变换函数。这种时候,需要意识到变换函数的顺序。这是因为, 每一个变换函数不仅改变了元素,同时也会改变和元素关联的transform坐标系 ,当变换函数依次执行时,后一个变换函数总是基于前一个变换后的新transform坐标系。

    由于坐标系会随着每一次变换发生改变,因此不同顺序的情况下,元素最终的位置也不同。

    对此还有一种解释,即变换函数是通过数学上的矩阵乘法运算完成的,而矩阵的乘法是不满足交换律的。任意坐标空间内的变换函数或者变换函数的组合,都可以转换为一个矩阵(还有一个矩阵小工具 可以帮你做这个转换)。


    呃,或许是我数学没学好。

    下面贴一下效果和代码:

    html:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>正方体</title>
     5     <meta charset="utf-8">
     6     <link href="style.css" rel="stylesheet" type="text/css"/>
     7     <script src="script.js"></script>
     8 </head>
     9 <body>
    10     <div class="my3d">
    11         <div class="content" id="content">
    12             <div class="page" id="page1">1</div>
    13             <div class="page" id="page2">2</div>
    14             <div class="page" id="page3">3</div>
    15             <div class="page" id="page4">4</div>
    16             <div class="page" id="page5">5</div>
    17             <div class="page" id="page6">6</div>
    18         </div>
    19     </div>
    20     
    21     <div class="rotate-range">
    22     <p>rotate x: <span id="rotax-span">0</span> deg</p>
    23     <input type="range" min="-360" max="360" id="rotatex" value="0"  onchange="rotate()" /><br/>
    24     <p>rotate y: <span id="rotay-span">0</span> deg</p>
    25     <input type="range" min="-360" max="360" id="rotatey" value="0" onchange="rotate()" /><br/>
    26     <p>rotate z: <span id="rotaz-span">0</span> deg</p>
    27     <input type="range" min="-360" max="360" id="rotatez" value="0"  onchange="rotate()" /><br/>
    28 </div>
    29 
    30 
    31 
    32 </body>
    33 </html>

    css: 

    html, body, div, span,
            h1, h2, h3, h4, h5, h6, p
            a, img, ol, ul, li
            {
                margin:0;padding:0;border:0;outline:0;
                
            }
    .wrapper{
        width: 70%;
        border: 3px solid black;
    }
    .my3d{
        height: 370px;
        width: 100%;
        perspective:800;
        -webkit-perspective:800;
        -moz-perspective:800;
        -ms-perspective:800;
        -o-perspective:800;
        
        perspective-origin:50% 50%;
        -webkit-perspective-origin:50% 50%;
        -moz-perspective-origin:50% 50%;
        -ms-perspective-origin:50% 50%;
        -o-perspective-origin:50% 50%;
        
        overflow:hidden;
    }
    
    .content{
        height:160px;
        width:160px;
        position:relative;
       margin: 100px auto;
    
        
        transform-style:preserve-3d;
        -weibit-transform-style:preserve-3d;
        -moz-transform-style:preserve-3d;
        -ms-transform-style:preserve-3d;
        -o-transform-style:preserve-3d;
    }
    .page{
        color:white;
        width:160px;
        height:160px;
        background:black;
        font-size:180px;
        line-height:180px;
        text-align:center;
        padding:0px;
        position:absolute;
        
        transition:all 1s linear;
        -weibit-transition:all 1s linear;
        -moz-transition:all 1s linear;
        -ms-transition:all 1s linear;
        -o-transition:all 1s linear;
        
        
    }
    
    #page1{
        transform:translateZ(80px);
        -ms-transform:translateZ(80px);
        -moz-transform:translateZ(80px);
        -webkit-transform:translateZ(80px);
        -o-transform:translateZ(80px);
    }
    #page2{
        transform:rotateY(90deg) translateZ(80px);
        -ms-transform:rotateY(90deg) translateZ(80px);
        -moz-transform:rotateY(90deg) translateZ(80px);
        -webkit-transform:rotateY(90deg) translateZ(80px);
        -o-transform:rotateY(90deg) translateZ(80px);
    
    }
    #page3{
        transform:rotateY(90deg) translateZ(-80px);
        -ms-transform:rotateY(90deg) translateZ(-80px);
        -moz-transform:rotateY(90deg) translateZ(-80px);
        -webkit-transform:rotateY(90deg) translateZ(-80px);
        -o-transform:rotateY(90deg) translateZ(-80px);
    }
    #page4{
        transform:rotateX(90deg) translateZ(-80px);
        -ms-transform:rotateX(90deg) translateZ(-80px);
        -moz-transform:rotateX(90deg) translateZ(-80px);
        -webkit-transform:rotateX(90deg) translateZ(-80px);
        -o-transform:rotateX(90deg) translateZ(-80px);
    }
    #page5{
        transform:rotateX(90deg) translateZ(80px); 
        -ms-transform:rotateX(90deg) translateZ(80px); 
        -moz-transform:rotateX(90deg) translateZ(80px); 
        -webkit-transform:rotateX(90deg) translateZ(80px); 
        -o-transform:rotateX(90deg) translateZ(80px); 
    }
    #page6{
        transform:translateZ(-80px);
        -ms-transform:translateZ(-80px);
        -moz-transform:translateZ(-80px);
        -webkit-transform:translateZ(-80px);
        -o-transform:translateZ(-80px);
    }
    .rotate-range{
        margin-left: 400px;
    }
    .rotate-range input{
        display:block;
        width:400px;
    }

    JS:

     1     function rotate(){
     2         var content = document.getElementById("content");
     3         var rotexspan = document.getElementById("rotax-span");
     4         var roteyspan = document.getElementById("rotay-span");
     5         var rotezspan = document.getElementById("rotaz-span");
     6         
     7         var rotex = document.getElementById("rotatex").value;
     8         var rotey = document.getElementById("rotatey").value;
     9         var rotez = document.getElementById("rotatez").value;
    10         
    11        
    12         
    13         content.style.transform="rotateX("+rotex+"deg) rotateY("+rotey+"deg) rotate("+rotez+"deg)"; 
    14         rotexspan.innerHTML=rotex;
    15         roteyspan.innerHTML=rotey;
    16         rotezspan.innerHTML=rotez;
    17     }

    效果展示:( chorme和safari下效果比较好,由于perspective的浏览器兼容)

    By the way,IE不支持3d效果。

    1
    2
    3
    4
    5
    6

    rotate x: 0 deg


    rotate y: 0 deg


    rotate z: 0 deg

     

    以上内容,如有错误请指出,不甚感激。

  • 相关阅读:
    女子腰背疼痛案
    老人心悸心膝部无力屈伸不利案
    经方生姜泻心汤临床应用发挥
    电话求诊易误治
    女子乳房结块案
    小儿手足口案
    门纯德老先生经验
    男子肋部掣痛案
    加味潜降汤治疗阴虚阳亢之眩晕(来自网络)
    三叉神经痛与芎胡六虫汤
  • 原文地址:https://www.cnblogs.com/adelina-blog/p/5511357.html
Copyright © 2011-2022 走看看