wangjie 2020-02-22
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin:0; padding:0;} ul{ list-style: none;} #box{ width:300px; height: 300px; border:1px black solid; margin:30px auto; perspective: 500px; perspective-origin: right top; } #box ul{ width:100px; height:100px; margin:100px; position: relative; transition: 4s; transform-style: preserve-3d; transform-origin: center center -50px; /* transform:scale3d(.5 , 2 , 4); */ } #box ul li{ width:100%; height: 100%; position: absolute; left:0; top:0; text-align: center; line-height: 100px; font-size:30px; } #box ul li:nth-of-type(1){ background:red;} #box ul li:nth-of-type(2){ background:blue; left:100px; transform-origin:left; transform:rotateY(90deg);} #box ul li:nth-of-type(3){ background:green; left:-100px; transform-origin:right; transform:rotateY(-90deg); } #box ul li:nth-of-type(4){ background:hotpink; top:-100px; transform-origin:bottom; transform:rotateX(90deg); } #box ul li:nth-of-type(5){ background:gray; top:100px; transform-origin:top; transform:rotateX(-90deg); } #box ul li:nth-of-type(6){ background:yellow; transform:translate3d(0,0,-100px) rotateY(180deg); } #box:hover ul{ transform:rotateY(360deg); /* transform:rotate3d(1,1,1,360deg); */ } </style> </head> <body> <div id="box"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul> </div> </body> </html>
立方体
以上是一个立方体的代码,在制作过程中有一个基本的思想:拼接,就是首先要有一个装下六个面立方体的父盒子,然后是父盒子里面对应的六个子盒子,子盒子的六个面通过旋转或是移动形成相应的角度将立方体的形状拼接出来,最后在立方体上添加旋转达到旋转效果。/*逆战*/
刚刚接触的人会有3个疑惑点:
1、父盒子和子盒子的模型混淆,即并不清楚的父盒子里面装的是子盒子拼接出来的立方体,所以属性 transform-style: preserve-3d应当添加给父元素而非子元素;
2、旋转点的定位transform-origin: center center -50px也应当添加给父元素,应为最后旋转的是立方体而非立方体的一个面;
通过原生JS,点击事件,鼠标按下、鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示。<input type="text" class="xNum" value="&