Animated 3d cube, it responses to the mouse moves
A Pen by Yevhenii Kamenskyi on CodePen.
Animated 3d cube, it responses to the mouse moves
A Pen by Yevhenii Kamenskyi on CodePen.
| <div class="box"> | |
| <div class="p1">œ</div> | |
| <div class="p2">∑</div> | |
| <div class="p3">å</div> | |
| <div class="p4">®</div> | |
| <div class="p5">†</div> | |
| <div class="p6">¥</div> | |
| </div> | |
| <div class="sh"></div> |
| var centerX = window.innerWidth / 2; | |
| var centerY = window.innerHeight / 2; | |
| var layers = document.querySelectorAll('.box > div'); | |
| function rotateTo(x, y){ | |
| layers[0].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 90}deg) rotateZ(${0}deg)`; | |
| layers[1].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 270}deg) rotateZ(${0}deg)`; | |
| layers[2].style.transform = `rotateX(${y + 90}deg) rotateY(${0}deg) rotateZ(${-x}deg)`; | |
| layers[3].style.transform = `rotateX(${y + -90}deg) rotateY(${0}deg) rotateZ(${x}deg)`; | |
| layers[4].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 0}deg) rotateZ(${0}deg)`; | |
| layers[5].style.transform = `rotateX(${y + 0}deg) rotateY(${x + 180}deg) rotateZ(${0}deg)`; | |
| }; | |
| document.body.addEventListener('mousemove', function(e){ | |
| var x = (centerX - e.clientX) / centerX * 360, | |
| y = (centerY - e.clientY) / centerY * 360; | |
| rotateTo(x, y); | |
| }); | |
| // autoplay | |
| var apX = 0; | |
| var apY = 0; | |
| // comment below | |
| setInterval(() => rotateTo(apX += 1, apY +=1), 60); |
| $size: 150px; | |
| $colors: #73c25b #fdc333 #f99427 #e7524f #a856a9 #26aee3; | |
| html, body{ | |
| width: 100vw; | |
| height: 100vh; | |
| margin: 0; | |
| overflow: hidden; | |
| } | |
| body{ | |
| font-family: 'Open Sans', sans-serif; | |
| background: radial-gradient(rgba(#000,.3), #fff); | |
| } | |
| .box { | |
| position: relative; | |
| width: $size; | |
| height: $size; | |
| margin: $size auto; | |
| transform-style: preserve-3d; | |
| perspective: 600px; | |
| } | |
| .box > div { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: $size; | |
| height: $size; | |
| font-size: 5rem; | |
| font-weight: bold; | |
| color: rgba(#fff, .4); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| opacity: 0.9; | |
| transform-origin: 50% 50% $size / -2; | |
| } | |
| @for $i from 1 through 6 { | |
| .p#{$i} { | |
| background: nth($colors, $i); | |
| box-shadow: inset 0 0 25px rgba(#fff, 0.2); | |
| } | |
| } | |
| div.sh{ | |
| background: radial-gradient(#000, rgba(#000,0)); | |
| position: absolute; | |
| top: 1.3 * $size; | |
| left: 0; | |
| right: 0; | |
| margin: $size auto; | |
| width: $size; | |
| height: $size; | |
| filter: blur(50px); | |
| z-index: -1; | |
| transform: rotateX(50deg) scaleY(0.7); | |
| } |