ZorNet.Ru — сайт для вебмастера » JavaScript и jQuery » 3D слайдер-карусель под управлением клика

3D слайдер-карусель под управлением клика

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
22 Мая 2021 Загрузок: 4 Просмотров: 965 Комментариев: (0)

Поделиться в социальных сетях

Материал разместил

Оставь свой отзыв

Комментарии: 0
avatar