3D слайдер-карусель под управлением клика
Отлично выполнено по дизайну красивый 3D слайдер карусель, где вы можете задействовать клик в управление движением мышки, а это передвигать картинки. Сам слайдер по умолчанию схожий на карусель, где просматривается как основная сторона, так и задняя, ведь в код мы выставляем по 2 аналогичных картинок, на одно изображение. Плюсы и минусы есть с этом слайдере, больше он схожий на объявление, где мы выставляем заданную вами тему, которая будет кружится. Также вы можете задействовать, как мало картинок, так и большое количество, где только делаем основу больше при добавление. При открытие страницы, эта карусель автоматически запускается, что можно наблюдать на главной или отдельной страницы. Так можно курсором развернуть: Установка: HTML Или Код <div id="sakolec-arousel"> <div id="peretaskiva-konteynes"> <div id="korpus-vayderved"> <a href="Ссылка на изображение"><img src="Ссылка на изображение 2" alt="" /></a> <!-- Еще фото --> <a href="Ссылка на изображение"><img src="Ссылка на изображение 2" alt="" /></a> <p>3D Carousel</p> </div> <div id="ground"></div> </div> </div> CSS Код #sakolec-arousel { touch-action: none; display: flex; height: 400px; perspective: 1000px; transform-style: preserve-3d; } #peretaskiva-konteynes, #korpus-vayderved { position: relative; display: flex; margin: auto; transform-style: preserve-3d; transform: rotateX(-10deg); } #peretaskiva-konteynes a { transform-style: preserve-3d; position: absolute; left: 0; top: 0; width: 100%; height: 100%; box-shadow: 0 4px 8px rgb(21 21 21 / 24%), 0 10px 16px rgb(19 19 19 / 11%); border: 8px solid #75b8bd; } #peretaskiva-konteynes img { width: 100%; height: 100%; filter: grayscale(50%) contrast(0.8); transition: filter 0.3s; } #peretaskiva-konteynes a:hover img{ filter: grayscale(0) contrast(1); } #peretaskiva-konteynes p { line-height: 1; font-size: 50px; font-weight: bold; text-align: center; font-family: Serif; position: absolute; top: 100%; left: 50%; transform: translate(-50%, -50%) rotateX(90deg); color: #337AB7; font-family: Verdana, sans-serif; } #ground { width: 900px; height: 900px; position: absolute; top: 100%; left: 50%; transform: translate(-50%, -50%) rotateX(90deg); } @keyframes spin { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } } @keyframes spinRevert { from { transform: rotateY(360deg); } to { transform: rotateY(0deg); } } JS Код let radius = 240; let autoRotate = true; let rotateSpeed = -60; let imgWidth = 140; let imgHeight = 205; setTimeout(init, 300); let odrag = document.getElementById("peretaskiva-konteynes"); let ospin = document.getElementById("korpus-vayderved"); let carousel = document.getElementById("sakolec-arousel"); let aImg = ospin.getElementsByTagName("a"); ospin.style.width = imgWidth + "px"; ospin.style.height = imgHeight + "px"; let ground = document.getElementById("ground"); ground.style.width = radius * 3 + "px"; ground.style.height = radius * 3 + "px"; function init(delayTime) { for (let i = 0; i < aImg.length; i++) { aImg[i].style.transform = "rotateY(" + i * (360 / aImg.length) + "deg) translateZ(" + radius + "px)"; aImg[i].style.transition = "transform 1s"; aImg[i].style.transitionDelay = delayTime || (aImg.length - i) / 4 + "s"; } } function applyTranform(obj) { if (tY > 180) tY = 180; if (tY < 0) tY = 0; obj.style.transform = "rotateX(" + -tY + "deg) rotateY(" + tX + "deg)"; } function playSpin(yes) { ospin.style.animationPlayState = yes ? "running" : "paused"; } let sX, sY, nX, nY, desX = 0, desY = 0, tX = 0, tY = 10; if (autoRotate) { let animationName = rotateSpeed > 0 ? "spin" : "spinRevert"; ospin.style.animation = `${animationName} ${Math.abs( rotateSpeed )}s infinite linear`; } carousel.onpointerdown = function(e) { clearInterval(odrag.timer); e = e || window.event; let sX = e.clientX, sY = e.clientY; this.onpointermove = function(e) { e = e || window.event; let nX = e.clientX, nY = e.clientY; desX = nX - sX; desY = nY - sY; tX += desX * 0.1; tY += desY * 0.1; applyTranform(odrag); sX = nX; sY = nY; }; this.onpointerup = function(e) { odrag.timer = setInterval(function() { desX *= 0.95; desY *= 0.95; tX += desX * 0.1; tY += desY * 0.1; applyTranform(odrag); playSpin(false); if (Math.abs(desX) < 0.5 && Math.abs(desY) < 0.5) { clearInterval(odrag.timer); playSpin(true); } }, 17); this.onpointermove = this.onpointerup = null; }; return false; }; Возможно большинство подумает, что это только для интернет магазинов может сработать, здесь все зависит от вас, ведь вы сами можете красиво оформить стилистику, и оригинально преподнести материал. Демонстрация Источник: atuin.ru |
Поделиться в социальных сетях
Материал разместил
Комментарии: 0 | |