JSFiddle - React, Tailwind, and code Playground

HTML

<div class="wrap">
	<div class="cube">
		<div class="front">front</div>
		<div class="back">back</div>
		<div class="top">top</div>
		<div class="bottom">bottom</div>
		<div class="left">left</div>
		<div class="right">right</div>
	</div>
	</div>
	<button onclick="rotY(-90)" style="top:0;">Левее</button><button style="top:0;left:100px;" onclick="rotY(90)">Правее</button>
	<button onclick="rotX(-90)" style="top:100px;"> Верх</button><button style="top:100px; left:100px;" onclick="rotX(90)">Низ</button>
	<button onclick="rotZ(-90)" style="top:200px;">На лево</button><button style="top:200px; left:100px;" onclick="rotZ(90)">На право</button>

CSS

body{
		width:100%;
		background:rgba(200,230,255,0.5);
	}
	.wrap {
		width:200px;
		height:200px;
		margin:220px 220px;
		/*perspective: 800px;*/
		perspective-origin: 0 200px;
	}
	.cube {
		position: relative;
		width: 200px;
		height: 200px;
		transform-style: preserve-3d;
	}
	.cube div {
		position: absolute;
		width: 200px;
		height: 200px;
		background:rgba(0,0,0,0.9);
		color:#fff;
		Box-shadow:0px 1px 0px #FFF,0px -1px 0px #FFF,1px 0px 0px #FFF,-1px 0px 0px #FFF;
	}
	.back {
		transform: translateZ(-100px) rotateY(180deg);
	}
	.right {
		transform: rotateY(-270deg) translateX(100px);
		transform-origin: top right;

	}
	.left {
		transform: rotateY(270deg) translateX(-100px);
		transform-origin: center left;
	}
	.top {
		transform: rotateX(-90deg) translateY(-100px);
		transform-origin: top center;
	}
	.bottom {
		transform: rotateX(90deg) translateY(100px);
		transform-origin: bottom center;
	}
	.front {
		transform: translateZ(100px);
	}
	@keyframes spin_right{
		from { transform: rotateY(0);}
		to { transform: rotateY(90deg);}
	}
	@keyframes zume{
		0% { transform: scale(1);}
		50% { transform: scale(0.8);}
		100% { transform: scale(1);}
	}
	.cube {
		/*animation: spin_right 1s infinite linear;
		animation: spin_right 1s ease;*/
	}
	button{
		position:fixed;
	}
	.wrap.ani{
		animation: zume 1s linear;
	}

JavaScript

var nowX = 0;
	var nowY = 0;
	var nowZ = 0;
	var off = true;
	function rotX(angle){
		if(off){
			var $elem = $(".cube");
			$(".wrap").addClass("ani");
			off = false;
			$({deg: nowX}).animate({deg: nowX+angle}, {
			duration: 2000,
				step: function(now) {
					$elem.css({
						transform: 'rotateX(' + now + 'deg) '+'rotateY('+nowY+'deg) '+'rotateZ('+nowZ+'deg)'
					});
				},
			complete : function(){off=true; $(".wrap").removeClass("ani");}			
			});
			nowX = nowX + angle;
		}
	}
	function rotZ(angle){
		if(off){
			off = false;
			var $elem = $(".cube");
			$(".wrap").addClass("ani");
			$({deg: nowZ}).animate({deg: nowZ+angle}, {
			duration: 2000,
				step: function(now) {
					$elem.css({
						transform: 'rotateX(' + nowX + 'deg) '+'rotateY('+nowY+'deg) '+'rotateZ('+now+'deg)'
					});
				},
			complete : function(){off=true; $(".wrap").removeClass("ani");}			
			});
			nowZ = nowZ + angle;
		}
	}
	function rotY(angle){
		if(off){
			off = false;
			var $elem = $(".cube");
			$(".wrap").addClass("ani");
			$({deg: nowY}).animate({deg: nowY+angle}, {
			duration: 2000,
				step: function(now) {
					$elem.css({
						transform: 'rotateX(' + nowX + 'deg) '+'rotateY('+now+'deg) '+'rotateZ('+nowZ+'deg)'
					});
				},
			complete : function(){off=true; $(".wrap").removeClass("ani");}			
			});
			nowY = nowY + angle;
		}
	}