js实现可旋转的立方体模型
这是一个简单的立方体应用,他是很多立方旋转变换的基础,例如实现3D轮播图的实现等。
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>可旋转立方体效果</title>
<styletype="text/css">
*{padding:0;margin:0}
img{border:0}
ulli{list-style:none}
ul{width:200px;height:200px;margin:100pxauto;
position:relative;-webkit-transform-style:preserve-3d;
/*perspective:100px;*/
}
/*绕中心旋转,坐标轴会随旋转而旋转*/
li{width:200px;height:200px;position:absolute;text-align:center;line-height:200px;font-size:80px;font-weight:bold;color:#fff;}
/*构造六个面*/
li:nth-child(1){background:rgba(255,0,0,1);-webkit-transform:rotateX(90deg)translateZ(100px);}
li:nth-child(2){background:rgba(0,255,255,1);-webkit-transform:rotateX(270deg)translateZ(100px);}
li:nth-child(3){background:rgba(255,0,255,1);-webkit-transform:rotateY(90deg)translateZ(100px);}
li:nth-child(4){background:rgba(0,255,0,1);-webkit-transform:rotateY(270deg)translateZ(100px);}
li:nth-child(5){background:rgba(200,200,0,1);-webkit-transform:translateZ(-100px);}
li:nth-child(6){background:rgba(0,0,255,1);-webkit-transform:translateZ(100px);}
.button{
width:200px;margin:20pxauto;
position:relative;
cursor:pointer;
}
input{
width:50px;height:30px;
position:absolute;
cursor:pointer;
}
/*按钮的绝对定位*/
input:nth-child(1){left:100px;top:0}
input:nth-child(2){left:200px;top:50px;}
input:nth-child(3){left:0px;top:50px;}
input:nth-child(4){left:100px;top:100px;}
input:nth-child(5){left:100px;top:50px;}
</style>
<scripttype="text/javascript">
window.onload=function(){
varx=0,y=0;
varul=document.getElementById('ul');
varinputs=document.getElementsByTagName('input');
for(vari=0;i<inputs.length;i++){
inputs[i].onclick=run;
}
functionrun(){
/*渐变*/
ul.style.webkitTransition='-webkit-transform3slinear';
ul.style.oTransition='-o-transform3slinear';
ul.style.transition='transform3slinear';
/*旋转的规则,就是x,y方向的deg改变*/
if(inputs[0]==this){x+=90;}
if(inputs[1]==this){y+=90;}
if(inputs[2]==this){y-=90;}
if(inputs[3]==this){x-=90;}
if(inputs[4]==this){
x=0;y=0;
ul.style.webkitTransition='-webkit-transform.1slinear';
ul.style.oTransition='-o-transform.1slinear';
ul.style.transition='transform.1slinear';
}
ul.style.webkitTransform='rotateX('+x+'deg)rotateY('+y+'deg)';
ul.style.oTransform='rotateX('+x+'deg)rotateY('+y+'deg)';
ul.style.transform='rotateX('+x+'deg)rotateY('+y+'deg)';
}
document.addEventListener('keydown',function(e){
ul.style.webkitTransition='-webkit-transform3slinear';
switch(e.keyCode){
case37:y-=90;//左箭头
break;
case38:x+=90;//上箭头
break;
case39:y+=90;//下箭头
break;
case40:x-=90;//右箭头
break;
case13:x=0;y=0;//回车(当回车时,迅速转回初始状态)
ul.style.webkitTransition='-webkit-transform0.1slinear';
break;
}
ul.style.webkitTransform="rotateX("+x+"deg)rotateY("+y+"deg)";//变换效果(沿X轴和Y轴旋转)
},false);document.addEventListener("keydown",function(e){
ul.style.webkitTransition='-webkit-transform3slinear';
ul.style.oTransition='-o-transform3slinear';
ul.style.transition='transform3slinear';
switch(e.keyCode){
case37:
}
})
/*functionrun(){
ul.style.webkitTransition='-webkit-transform3slinear';//设置立方体变换的属性、持续时间、动画类型
if(inputs[0]==this){x+=90;}
if(inputs[1]==this){y+=90;}
if(inputs[2]==this){y-=90;}
if(inputs[3]==this){x-=90;}
if(inputs[4]==this){x=0;y=0;ul.style.webkitTransition='-webkit-transform0.1slinear';}//当点击重置按钮时,迅速转回到初始状态。
ul.style.webkitTransform="rotateX("+x+"deg)rotateY("+y+"deg)";//变换效果(沿X轴和Y轴旋转)
}*/
}
</script>
</head>
<body>
<ulid="ul">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<divclass="container">
</div>
<divclass="button">
<inputtype="button"value="上">
<inputtype="button"value="右">
<inputtype="button"value="左">
<inputtype="button"value="下">
<inputtype="button"value="重置">
</div>
</body>
</html>