// Inspiration / Copy/Paste Source: https://desandro.github.io/3dtransforms/docs/rectangular-prism.html var boxDimensions = { width: 172, height: 260, depth: 64 }; var box = document.querySelector('.container').children[0], showPanelButtons = document.querySelectorAll('#show-buttons button'), panelClassName = 'show-front', onButtonClick = function(event) { $(box).css('transform', ''); box.classList.remove(panelClassName); panelClassName = event.target.className; box.classList.add(panelClassName); }; for (var i = 0, len = showPanelButtons.length; i < len; i++) { showPanelButtons[i].addEventListener('click', onButtonClick, false); } $(box).on('mouseover mousemove', function(event){ var x = event.pageX - $(box).offset().left; var y = event.pageY - $(box).offset().top; var xDegrees = ((x - (boxDimensions.width / 2)) / boxDimensions.width) * 50; var yDegrees = ((y - (boxDimensions.height / 2)) / boxDimensions.height) * 20; $(box).css('transform', 'rotateY(' + xDegrees + 'deg) rotateX(' + -yDegrees + 'deg)') })
<section class="container"> <div id="box" class="show-front"> <figure class="front"></figure> <figure class="right"></figure> <figure class="left"></figure> </div> </section> <br> <hr> <p id="show-buttons"> <button class="show-left">Show LEFT</button> <button class="show-front">Show FRONT</button> <button class="show-right">Show RIGHT</button> </p>
$box-dimensions--width: 172px; $box-dimensions--height: 260px; $box-dimensions--depth: 64px; .container { width: $box-dimensions--width; height: $box-dimensions--height; position: relative; margin: 40px auto; perspective: 500px; } #box { width: 100%; height: 100%; position: absolute; top: 0; left: 0; transform-style: preserve-3d; transition: transform 1s; &:hover { transition: transform 0.1s; } } #box figure { display: block; position: absolute; margin: 0; font-family: sans-serif; font-size: 40px; text-align: center; font-weight: bold; color: white; backface-visibility: hidden; } #box .front { width: $box-dimensions--width; height: $box-dimensions--height; background-color: #036; background-image: url("https://dl.dropboxusercontent.com/u/30174802/_cdn/c-box/front.jpg"); } #box .right, #box .left { width: $box-dimensions--depth; height: $box-dimensions--height; background-color: #039; } #box .left { left: -$box-dimensions--depth; transform-origin: top right; transform: rotateY(-90deg); background-image: url("https://dl.dropboxusercontent.com/u/30174802/_cdn/c-box/left.jpg"); } #box .right { right: -$box-dimensions--depth; transform-origin: top left; transform: rotateY(90deg); background-image: url("https://dl.dropboxusercontent.com/u/30174802/_cdn/c-box/right.jpg"); } #box.show-right { transform: translateZ(-$box-dimensions--width / 2) rotateY(-90deg); } #box.show-left { transform: translateZ(-$box-dimensions--depth) rotateY(90deg); }