空间转换动画

153 阅读2分钟

移动web

一,空间转换

1.空间位移:使用translate实现元素空间位移效果

` transform:translateX(值);
  transform:translateX(值);
  transform:translateX(值);
  transform:translate3d(x,y,z);`

例如:鼠标悬停box让box分别在X Y Z 方向移动100px

` .box:hover{
 transform:translate3d(100px,100px,100px);`

2.透视效果:使用perspective属性实现透视效果(必须添加给父元素)

作用:空间转换时,为元素添加近大远小,近实远虚的效果

`  perspective1200px(取值范围400px-1200px)`

3.空间旋转:使用rotate实现元素空间旋转效果

左手法则:判断旋转方向: 左手握住旋转轴, 拇指指向正值方向, 手指弯曲方向为旋转正值方向

空间旋转X轴80度:`transform: rotateX(80deg);`

空间旋转Y轴80度:`transform: rotateY(80deg);`

空间旋转Z轴80度:`transform: rotateZ(80deg);`

4.立体呈现:使用transform-style: preserve-3d呈现立体图形给父级元素添加

实现方法:添加 `transform-style: preserve-3d;` 使子元素处于真正的3d空间

例如:

.box {
        width: 200px;
        height: 200px;
        margin: 100px auto;
        background-color: #0a0;
        transition: 1s;
        /* 开启3d立体环境 */
        transform-style: preserve-3d;
    }
    .son {
        width: 200px;
        height: 200px;
        background-color: orange;
        /* 让橙色盒子沿着z轴,向人眼方向走200px */
        transform: translateZ(200px);
    }

5.空间缩放:使用scale实现空间缩放效果

   ` transform: scaleX(倍数);  
    
     transform: scaleY(倍数); 
     
     transform: scaleZ(倍数); 
     
     transform: scale3d(x, y, z); ` 
     

二,动画

1.动画实现步骤

定义动画

` @keyframes 动画名称 {
           from{}
           to{}
         } `

使用动画

2.animation复合属性

animation:动画名称 动画执行时间 动画延迟时间 速度曲线(linear) 播放次数无限次(infinite) 反向播放(alternate) 停留在结束位置(forwards) 没有顺序限制

3.animation拆分写法

animation-name :动画名称

animation-duration 动画时长 animation-delay 延迟时间

animation-fill-mode 动画执行完毕时状态 forwards:最后一帧状态 backwards:第一帧状态

animation-timing-function 速度曲线 steps(数字):逐帧动画 animation-iteration-count 重复次数 infinite为无限循环

animation-direction 动画执行方向 alternate为反向

animation-play-state 暂停动画 paused为暂停,通常配合:hover使用

4.逐帧动画:使用steps实现逐帧动画,一般配合精灵图实现动画效果

animation-timing-function: steps(N); N将动画分成N等份

例如:

```.box{
        position: fixed;
        left: 0;
        bottom: 0;
        width: 184px;
        height: 325px;
        background-image: url(./images/精神小伙.jpg);
        animation: move 2s infinite steps(8), walk 3s linear  forwards; /*使用动画*/
    }
    /*多个动画的使用用逗号,连接*/
    
    /*定义动画*/
    @keyframes move {
        to{
            background-position: -1472px 0;
        }
    }
    /*定义动画*/
    @keyframes walk {
        to{
            left: 50%;
            transform: translate(-50%);
        }
    }
    
    /*body部分*/
    <body>
         <div class="box"></div>
    </body>