用Javascript编写魔方程序

1、先测试下显示魔方(css 3D) (已完成)

2、滚动。(已完成)

3、打乱。(创建数组。。)

4、操作。

5、记录。

6、自动还原。

7、优化。

那就开始吧。 

先初始化一个魔方: 

 

然后,你可以开始旋转看看,rotateY(210deg);你会发现这不是我们想要的。

rotateY是以当前面的中心线为轴进行旋转,而我们希望这个面以立方体的中心线为轴进行旋转。

 

终于调整到正确。代码如下。

 

 

 

<!doctype html>
<html>
<head>
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="renderer" content="webkit">
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
 

<style>
* {
    margin:0;
    padding:0;
    list-style:none;
    box-sizing:border-box;
}
.container {

    width:180px;
    height:180px;
    margin:100px auto;
}
.box {
    perspective:500px;
    position:relative;
}
.content {
    width:180px;
    height:180px;
    transform-style:preserve-3d;
    animation:run 10s infinite;
}
.face {
    width:180px;
    height:180px;
    position:absolute;
    text-align:center;
    line-height:180px;
    
}

/*@keyframes run {
    0% {
    transform:rotateY(0);
}
10% {
    transform:rotateY(180deg);
}
20% {
    transform:rotateX(360deg);
    transform:rotateY(360deg);
   
}
}*/
 
.minibox{
	width: 54px;
	height:54px; 
	border-radius: 4px;
	float: left;
	border:3px solid #000;  
}
 

  
</style>
<script type="text/javascript">
	$(function (argument) {
		 $(".aside div").css("background","green");
		 $(".bside div").css("background","yellow");
		 $(".cside div").css("background","red");
		 $(".dside div").css("background","blue");
		 $(".eside div").css("background","white");
		 $(".fside div").css("background","pink");
		 $(".aside").css("transform","translateZ(90px) translateZ(-18px) ");
		 $(".bside").css("transform","translateZ(-90px) translateX(-18px) rotateY(180deg)");
		 $(".cside").css("transform","rotateY(-90deg)");
		 $(".dside").css("transform","translateX(0px) translateZ(-20px)   rotateY(90deg) ");
		 $(".eside").css("transform","rotateX(90deg)");
		 $(".fside").css("transform","translateZ(-18px) rotateX(-90deg)");
		  $(".cside").css("left","-90px"); 
		 $(".dside").css("left","72px");
		 $(".eside").css("top","-90px");
		 $(".fside").css("top","72px");
		  $(".content").css("transform","rotateX(156deg) rotateY(151deg) rotateZ(183deg)");
		  // $(".content").css("transform","rotateY(180deg)");

		 //  $(".aside").css("transform","translateX(-20px) translateY(-20px)  translateZ(-90px) rotateY(20deg) rotateZ(0deg) rotateX(-20deg)");
		 // $(".bside").css("transform","translateX(-75px) translateZ(90px) rotateY(110deg) rotateZ(-20deg)");
		 // $(".cside").css("transform","translateZ(0px) translateY(90px) rotateY(20deg) rotateX(70deg)");
		 // $(".dside").css("transform","translateZ(120px) translateX(40px) translateY(32px) rotateY(20deg) rotateX(-20deg)");
		 // $(".eside").css("transform","translateZ(90px) translateX(20px) translateY(-83px) rotateX(69deg) rotateZ(-18deg) rotateY(7deg)");
		 // $(".fside").css("transform","translatex(-90px) translatez(90px) rotatey(90deg)");
	});
</script>
</head>
<body>

 


<div class="container">
    <div class="box">
		<div class="content">
		    <div class="aside face"> <!--魔方第一个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="bside face"> <!--魔方第2个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="cside face"> <!--魔方第3个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="dside face"> <!--魔方第一4个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="eside face"> <!--魔方第5个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="fside face"> <!--魔方第6个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     
		    
		</div>
	 </div>
	     
	    
</div>	

</body>
</html>
 

然后我让它转动起来,玩了一下,明天再看看怎么把数据绑定上去。

<!doctype html>
<html>
<head>
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="renderer" content="webkit">
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
 

<style>
* {
    margin:0;
    padding:0;
    list-style:none;
    box-sizing:border-box;
}
.container {

    width:180px;
    height:180px;
    margin:100px auto;
}
.box {
    perspective:500px;
    position:relative;
}
.content {
    width:180px;
    height:180px;
    transform-style:preserve-3d;
    animation:run 10s infinite;
}
.face {
    width:180px;
    height:180px;
    position:absolute;
    text-align:center;
    line-height:180px;
    
}

/*@keyframes run {
    0% {
    transform:rotateY(0);
}
10% {
    transform:rotateY(180deg);
}
20% {
    transform:rotateX(360deg);
    transform:rotateY(360deg);
   
}
}*/
 
.minibox{
	width: 54px;
	height:54px; 
	border-radius: 4px;
	float: left;
	border:3px solid #000;  
}
 
.rightarraw{
	background-image: url(/assets/img/jt.png);
    width: 62px;
    height: 50px;
    background-repeat: round;
    position: absolute;
    top: 115px;
    left: 323px;
    transform:rotateX(30deg);
}
  
</style>
<script type="text/javascript">
	$(function (argument) {
		 $(".aside div").css("background","green");
		 $(".bside div").css("background","yellow");
		 $(".cside div").css("background","red");
		 $(".dside div").css("background","blue");
		 $(".eside div").css("background","white");
		 $(".fside div").css("background","pink");
		 $(".aside").css("transform","translateZ(90px) translateZ(-18px) ");
		 $(".bside").css("transform","translateZ(-90px) translateX(-18px) rotateY(180deg)");
		 $(".cside").css("transform","rotateY(-90deg)");
		 $(".dside").css("transform","translateX(0px) translateZ(-20px)   rotateY(90deg) ");
		 $(".eside").css("transform","rotateX(90deg)");
		 $(".fside").css("transform","translateZ(-18px) rotateX(-90deg)");
		  $(".cside").css("left","-90px"); 
		 $(".dside").css("left","72px");
		 $(".eside").css("top","-90px");
		 $(".fside").css("top","72px");
		  $(".content").css("transform","rotateX(156deg) rotateY(151deg) rotateZ(183deg)");
		  // $(".content").css("transform","rotateY(180deg)");

		 //  $(".aside").css("transform","translateX(-20px) translateY(-20px)  translateZ(-90px) rotateY(20deg) rotateZ(0deg) rotateX(-20deg)");
		 // $(".bside").css("transform","translateX(-75px) translateZ(90px) rotateY(110deg) rotateZ(-20deg)");
		 // $(".cside").css("transform","translateZ(0px) translateY(90px) rotateY(20deg) rotateX(70deg)");
		 // $(".dside").css("transform","translateZ(120px) translateX(40px) translateY(32px) rotateY(20deg) rotateX(-20deg)");
		 // $(".eside").css("transform","translateZ(90px) translateX(20px) translateY(-83px) rotateX(69deg) rotateZ(-18deg) rotateY(7deg)");
		 // $(".fside").css("transform","translatex(-90px) translatez(90px) rotatey(90deg)");
		 // 
		 
	  	  console.log(".");
       
		 
 
		 $(".minibox").on("click", function(){
		 	var x=parseInt($("#datax").html())+5;
		 	var y=parseInt($("#datay").html())+5;
		 	var z=parseInt($("#dataz").html())+5;
		 	   $(".content").css("transform", "rotateX("+x+"deg) rotateY("+y+"deg) rotateZ("+z+"deg)");
			  $("#datax").html(x); $("#datay").html(y); $("#dataz").html(z);
			});
	});

	setInterval(function function_name(argument) {
		 var x=parseInt($("#datax").html())+1;
		 	var y=parseInt($("#datay").html())+2;
		 	var z=parseInt($("#dataz").html())+3;
		 	   $(".content").css("transform", "rotateX("+x+"deg) rotateY("+y+"deg) rotateZ("+z+"deg)");
			  $("#datax").html(x); $("#datay").html(y); $("#dataz").html(z);
			 
	},10);

	 
	  
</script>
</head>
<body>

 
<div id="datax">156</div><div id="datay">151</div><div id="dataz">183</div>

<div class="container">
    <div class="box">
		<div class="content">
		    <div class="aside face"> <!--魔方第一个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="bside face"> <!--魔方第2个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="cside face"> <!--魔方第3个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="dside face"> <!--魔方第一4个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="eside face"> <!--魔方第5个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     <div class="fside face"> <!--魔方第6个面,类名aside-->
		        <div class="minibox"></div> 
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		        <div class="minibox"></div>
		    </div>
		     
		    
		</div>
	 </div>
	     
	    
</div>	

<div class="rightarraw"></div> 
</body>
</html>
 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东宇科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值