立方体を入力した角度に回す

正六面体を入力した角度に回すJavaScriptを作成しました。

1、正六面体を囲っているタグのCSSに基準点を定義する。
  例では、divタグ(id=cube)のスタイルに「transform-origin」を
  定義して、回転する基準点を設定している。

2、JavaScriptにて「transform」の値を変更する。
 例:document.getElementById(id).style.transform = ‘rotateX(“入力値”deg) rotateY(“入力値”deg)’

↓以下がテストのソースサンプルです。

▼JavaScript

<script type="text/javascript">
window.onload = function () {
	/* 回転ボタンをクリックされた時 */
	document.querySelector("#rotation").onclick = function () {angle()};
	/* リセットボタンをクリックされた時 */
	document.querySelector("#reset").onclick = function () {angle_init()};
	/* cubeのデフォルト */
	function angle_init(){
		document.getElementById("tax").value = "-20";
		document.getElementById("tay").value = "-20";
		/*document.getElementById("taz").value = "-20";*/
		angle();
	}
	/* cubeを入力値に回転させる */
	function angle(){
		var angleX = document.getElementById("tax").value;
		var angleY = document.getElementById("tay").value;
		var AngleRotate =""
		if ( angleX == parseFloat(angleX))
			{AngleRotate = AngleRotate + "rotateX(" + angleX + "deg)"};
		if ( angleY == parseFloat(angleY))
			{AngleRotate = AngleRotate + "rotateY(" + angleY + "deg)"};
		if ( AngleRotate != "")
			{document.getElementById("cube").style.transform = AngleRotate};
	}
}
</script>

▼CSS

<style>
body{
	width: 100%;
	height:100%;
}
#buttonBox{
	margin:20px 10px;
}
#main {
	margin:200px 200px;
}
#cube {
	margin:0;
	position: relative;
	transform-style: preserve-3d;
	transform-origin:100px 100px;
	transform: rotateX(-20deg) rotateY(-20deg);
}
.surface {
	position: absolute;
	left: 0;
	top: 0;
	width: 200px;
 	height: 200px;
	text-align: center;
	line-height: 200px;
	box-sizing: border-box;
	border: 2px solid black;
}
text{
	fill:black;
	font-size:130px;
}
#front {
	transform: rotateY(0deg) translateZ(100px);
	background:red;/*赤*/
	opacity: 0.6;

}
#back {
	transform: rotateX(180deg) translateZ(100px);
	background:pink;/*ピンク*/
	opacity: 0.6;
}
#right{
	transform: rotateY(90deg) translateZ(100px);
	background:blue;/*青*/
	opacity: 0.6;
}
#left {
	transform: rotateY(-90deg) translateZ(100px);
	background:skyblue;/*水色*/
	opacity: 0.6;
}
#top {
	transform: rotateX(90deg) translateZ(100px);
	background:green;/*緑*/
	opacity: 0.6;
}
#bottom {
	transform: rotateX(-90deg) translateZ(100px);
	background:yellow;/*黄色*/
	opacity: 0.6;
}
</style>

▼HTML

<div id="wrap">
<!-- 回転率入力 -->
	<form id="AngleBox">
		<p><br />角度X:<input type="text" name="tax" id="tax" value="-20" title="角度X">-360から360を入力下さい<br /></p>
		<p><br />角度Y:<input type="text" name="tay" id="tay" value="-20" title="角度Y">-360から360を入力下さい<br /></p>
<!--		<p><br />角度Z:<input type="text" name="taz" id="taz" value="-20" title="角度Z"><br /></p>-->
	</form>
	<div id="buttonBox">
		<button id="rotation">回 転</button>
		<button id="reset">リセット</button>
	</div>
<!-- 正六面体 -->
	<div id="main">
		<div id="cube">
			<svg class="surface" id="front" viewBox="-100 -100 200 200" >
				<rect x="-100" y="-100" width="200" hight="200"></rect>
				<text x="-50" y="40">1</text>
			</svg>
			<svg class="surface" id="back" viewBox="-100 -100 200 200" >
				<rect x="-100" y="-100" width="200" hight="200"></rect>
				<text x="-50" y="40">2</text>
			</svg>
			<svg class="surface" id="right" viewBox="-100 -100 200 200" >
				<rect x="-100" y="-100" width="200" hight="200"></rect>
				<text x="-50" y="40">3</text>
			</svg>
			<svg class="surface" id="left" viewBox="-100 -100 200 200" >
				<rect x="-100" y="-100" width="200" hight="200"></rect>
				<text x="-50" y="40">4</text>
			</svg>
			<svg class="surface" id="top" viewBox="-100 -100 200 200" >
				<rect x="-100" y="-100" width="200" hight="200"></rect>
				<text x="-50" y="40">5</text>
			</svg>
			<svg class="surface" id="bottom" viewBox="-100 -100 200 200" >
				<rect x="-100" y="-100" width="200" hight="200"></rect>
				<text x="-50" y="40">6</text>
			</svg>
		</div>
	</div>
</div>

デモページは、こちら