Своя карусель без подключений библиотек

10 февраля, 2023
145

HTML код для карусели:

<div class="carousel">
  <div class="carousel-container">
    <img src="img1.jpg" alt="Image 1">
    <img src="img2.jpg" alt="Image 2">
    <img src="img3.jpg" alt="Image 3">
    <!-- Add as many images as you want -->
  </div>
  <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
  <a class="next" onclick="plusSlides(1)">&#10095;</a>
</div>

CSS код для карусели:

.carousel {
  position: relative;
  width: 100%;
}

.carousel-container {
  display: flex;
}

.carousel-container img {
  width: 100%;
  object-fit: cover;
  object-position: center;
}

.prev,
.next {
  cursor: pointer;
  position: absolute;
  top: 50%;
  width: auto;
  margin-top: -22px;
  padding: 16px;
  color: white;
  font-weight: bold;
  font-size: 18px;
  transition: 0.6s ease;
  border-radius: 0 3px 3px 0;
  user-select: none;
}

.next {
  right: 0;
  border-radius: 3px 0 0 3px;
}

JavaScript код для карусели:

let slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides((slideIndex += n));
}

function showSlides(n) {
  let i;
  const slides = document.getElementsByClassName("carousel-container")[0].children;
  if (n > slides.length) {
    slideIndex = 1;
  }
  if (n < 1) {
    slideIndex = slides.length;
  }
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  slides[slideIndex - 1].style.display = "block";
}

Автоматический скрол для карусели

Чтобы сделать автоматический скрол в карусели, вы можете добавить функцию setInterval в JavaScript-код:

let slideIndex = 1;
showSlides(slideIndex);
setInterval(() => {
  showSlides((slideIndex += 1));
}, 3000); // Change the interval time here to adjust the speed

function plusSlides(n) {
  showSlides((slideIndex += n));
}

function showSlides(n) {
  let i;
  const slides = document.getElementsByClassName("carousel-container")[0].children;
  if (n > slides.length) {
    slideIndex = 1;
  }
  if (n < 1) {
    slideIndex = slides.length;
  }
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  slides[slideIndex - 1].style.display = "block";
}

В этом коде setInterval устанавливает интервал в 3000 миллисекунд (3 секунды), и в каждый интервал вызывается функция showSlides с аргументом (slideIndex + 1), что приводит к перелистыванию каждые 3 секунды. Чтобы изменить скорость автоматического скролла, измените значение интервала в миллисекундах.

Выводим 3 картинки на слайд

Тут можно или поменять HTML разметку и подкоректироват CSS:

Чтобы сделать 3 картинки на слайде, вы можете изменить HTML-разметку, добавляя каждую картинку в отдельный элемент <div>:

<!-- HTML code -->
<div class="carousel-container">
  <div class="carousel-slide">
    <img src="image1.jpg" alt="Image 1">
    <img src="image2.jpg" alt="Image 2">
    <img src="image3.jpg" alt="Image 3">
  </div>
  <div class="carousel-slide">
    <img src="image4.jpg" alt="Image 4">
    <img src="image5.jpg" alt="Image 5">
    <img src="image6.jpg" alt="Image 6">
  </div>
  <!-- Add or remove elements here -->
</div>

Также, вам нужно будет изменить стили CSS, чтобы каждая картинка отображалась в строку:

/* CSS code */
.carousel-slide {
  display: flex;
  flex-wrap: wrap;
}

.carousel-slide img {
  width: calc(100% / 3);
  height: auto;
}

Или чуть дописать JS:

Вы можете добавить или удалить элементы с картинками в JavaScript с помощью функций createElement(), appendChild() и removeChild():

// JavaScript code
const carouselContainer = document.querySelector(".carousel-container");
const carouselSlide = document.querySelector(".carousel-slide");

function changeNumberOfImages(newNumberOfImages) {
  // Remove the existing images
  while (carouselSlide.firstChild) {
    carouselSlide.removeChild(carouselSlide.firstChild);
  }

  // Add new images
  for (let i = 0; i < newNumberOfImages; i++) {
    const image = document.createElement("img");
    image.src = "image" + (i + 1) + ".jpg";
    image.alt = "Image " + (i + 1);
    carouselSlide.appendChild(image);
  }
}

changeNumberOfImages(3); // Display 3 images on each slide

Обратите внимание, что в приведенном коде используется фиксированное имя файла картинки для примера. Вы можете использовать любые имена файлов или загружать картинки динамически, например, с помощью AJAX.

Выводи пагинацию для карусели:

Для вывода пагинации вы можете добавить несколько кнопок и использовать JavaScript для отслеживания их нажатия и изменения слайда:

// JavaScript code
const carouselContainer = document.querySelector(".carousel-container");
const carouselSlide = document.querySelector(".carousel-slide");
const prevBtn = document.querySelector(".prev-btn");
const nextBtn = document.querySelector(".next-btn");
const pagination = document.querySelector(".pagination");

let index = 0;
let slides = carouselSlide.children;
let dots = [];

for (let i = 0; i < slides.length; i++) {
  const dot = document.createElement("span");
  dot.classList.add("dot");
  pagination.appendChild(dot);
  dots.push(dot);
}

dots[index].classList.add("active");

prevBtn.addEventListener("click", function() {
  goToSlide(index - 1);
});

nextBtn.addEventListener("click", function() {
  goToSlide(index + 1);
});

for (let i = 0; i < dots.length; i++) {
  dots[i].addEventListener("click", function() {
    goToSlide(i);
  });
}

function goToSlide(n) {
  slides[index].classList.remove("active");
  dots[index].classList.remove("active");
  index = (n + slides.length) % slides.length;
  slides[index].classList.add("active");
  dots[index].classList.add("active");
}

HTML-разметка для пагинации может выглядеть так:

<!-- HTML code -->
<div class="pagination">
</div>

В этом примере каждая точка представляет собой элемент span, а его класс active показывает, что слайд активен. Вы можете изменять внешний вид и стили пагинации, используя CSS.

/* CSS code */
.pagination {
  display: flex;
  justify-content: center;
  padding: 10px 0;
}

.dot {
  height: 10px;
  width: 10px;
  margin: 0 10px;
  border-radius: 50%;
  display: inline-block;
  background-color: gray;
  transition: background-color 0.2s ease-in-out;
}

.dot.active {
  background-color: black;
}

Теперь при клике на точку в пагинации, слайд будет меняться, а также активная точка будет выделена. Вы можете использовать этот код как основу для вашей собственной кастомной карусели.

Своя карусель без подключений библиотек

10 февраля, 2023
146

HTML код для карусели:

<div class="carousel">
  <div class="carousel-container">
    <img src="img1.jpg" alt="Image 1">
    <img src="img2.jpg" alt="Image 2">
    <img src="img3.jpg" alt="Image 3">
    <!-- Add as many images as you want -->
  </div>
  <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
  <a class="next" onclick="plusSlides(1)">&#10095;</a>
</div>

CSS код для карусели:

.carousel {
  position: relative;
  width: 100%;
}

.carousel-container {
  display: flex;
}

.carousel-container img {
  width: 100%;
  object-fit: cover;
  object-position: center;
}

.prev,
.next {
  cursor: pointer;
  position: absolute;
  top: 50%;
  width: auto;
  margin-top: -22px;
  padding: 16px;
  color: white;
  font-weight: bold;
  font-size: 18px;
  transition: 0.6s ease;
  border-radius: 0 3px 3px 0;
  user-select: none;
}

.next {
  right: 0;
  border-radius: 3px 0 0 3px;
}

JavaScript код для карусели:

let slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides((slideIndex += n));
}

function showSlides(n) {
  let i;
  const slides = document.getElementsByClassName("carousel-container")[0].children;
  if (n > slides.length) {
    slideIndex = 1;
  }
  if (n < 1) {
    slideIndex = slides.length;
  }
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  slides[slideIndex - 1].style.display = "block";
}

Автоматический скрол для карусели

Чтобы сделать автоматический скрол в карусели, вы можете добавить функцию setInterval в JavaScript-код:

let slideIndex = 1;
showSlides(slideIndex);
setInterval(() => {
  showSlides((slideIndex += 1));
}, 3000); // Change the interval time here to adjust the speed

function plusSlides(n) {
  showSlides((slideIndex += n));
}

function showSlides(n) {
  let i;
  const slides = document.getElementsByClassName("carousel-container")[0].children;
  if (n > slides.length) {
    slideIndex = 1;
  }
  if (n < 1) {
    slideIndex = slides.length;
  }
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  slides[slideIndex - 1].style.display = "block";
}

В этом коде setInterval устанавливает интервал в 3000 миллисекунд (3 секунды), и в каждый интервал вызывается функция showSlides с аргументом (slideIndex + 1), что приводит к перелистыванию каждые 3 секунды. Чтобы изменить скорость автоматического скролла, измените значение интервала в миллисекундах.

Выводим 3 картинки на слайд

Тут можно или поменять HTML разметку и подкоректироват CSS:

Чтобы сделать 3 картинки на слайде, вы можете изменить HTML-разметку, добавляя каждую картинку в отдельный элемент <div>:

<!-- HTML code -->
<div class="carousel-container">
  <div class="carousel-slide">
    <img src="image1.jpg" alt="Image 1">
    <img src="image2.jpg" alt="Image 2">
    <img src="image3.jpg" alt="Image 3">
  </div>
  <div class="carousel-slide">
    <img src="image4.jpg" alt="Image 4">
    <img src="image5.jpg" alt="Image 5">
    <img src="image6.jpg" alt="Image 6">
  </div>
  <!-- Add or remove elements here -->
</div>

Также, вам нужно будет изменить стили CSS, чтобы каждая картинка отображалась в строку:

/* CSS code */
.carousel-slide {
  display: flex;
  flex-wrap: wrap;
}

.carousel-slide img {
  width: calc(100% / 3);
  height: auto;
}

Или чуть дописать JS:

Вы можете добавить или удалить элементы с картинками в JavaScript с помощью функций createElement(), appendChild() и removeChild():

// JavaScript code
const carouselContainer = document.querySelector(".carousel-container");
const carouselSlide = document.querySelector(".carousel-slide");

function changeNumberOfImages(newNumberOfImages) {
  // Remove the existing images
  while (carouselSlide.firstChild) {
    carouselSlide.removeChild(carouselSlide.firstChild);
  }

  // Add new images
  for (let i = 0; i < newNumberOfImages; i++) {
    const image = document.createElement("img");
    image.src = "image" + (i + 1) + ".jpg";
    image.alt = "Image " + (i + 1);
    carouselSlide.appendChild(image);
  }
}

changeNumberOfImages(3); // Display 3 images on each slide

Обратите внимание, что в приведенном коде используется фиксированное имя файла картинки для примера. Вы можете использовать любые имена файлов или загружать картинки динамически, например, с помощью AJAX.

Выводи пагинацию для карусели:

Для вывода пагинации вы можете добавить несколько кнопок и использовать JavaScript для отслеживания их нажатия и изменения слайда:

// JavaScript code
const carouselContainer = document.querySelector(".carousel-container");
const carouselSlide = document.querySelector(".carousel-slide");
const prevBtn = document.querySelector(".prev-btn");
const nextBtn = document.querySelector(".next-btn");
const pagination = document.querySelector(".pagination");

let index = 0;
let slides = carouselSlide.children;
let dots = [];

for (let i = 0; i < slides.length; i++) {
  const dot = document.createElement("span");
  dot.classList.add("dot");
  pagination.appendChild(dot);
  dots.push(dot);
}

dots[index].classList.add("active");

prevBtn.addEventListener("click", function() {
  goToSlide(index - 1);
});

nextBtn.addEventListener("click", function() {
  goToSlide(index + 1);
});

for (let i = 0; i < dots.length; i++) {
  dots[i].addEventListener("click", function() {
    goToSlide(i);
  });
}

function goToSlide(n) {
  slides[index].classList.remove("active");
  dots[index].classList.remove("active");
  index = (n + slides.length) % slides.length;
  slides[index].classList.add("active");
  dots[index].classList.add("active");
}

HTML-разметка для пагинации может выглядеть так:

<!-- HTML code -->
<div class="pagination">
</div>

В этом примере каждая точка представляет собой элемент span, а его класс active показывает, что слайд активен. Вы можете изменять внешний вид и стили пагинации, используя CSS.

/* CSS code */
.pagination {
  display: flex;
  justify-content: center;
  padding: 10px 0;
}

.dot {
  height: 10px;
  width: 10px;
  margin: 0 10px;
  border-radius: 50%;
  display: inline-block;
  background-color: gray;
  transition: background-color 0.2s ease-in-out;
}

.dot.active {
  background-color: black;
}

Теперь при клике на точку в пагинации, слайд будет меняться, а также активная точка будет выделена. Вы можете использовать этот код как основу для вашей собственной кастомной карусели.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

+50

Клиентов которые доверили нам свой бизнес

24

Количество специалистов которые будут работать с вами

5.0/5.0

Оценка от наших клиентов на Google отзывах

Цена зависит от типа сайта и функциональности. Сайт визитка стоит от 8 000 гривен. Все зависит от того какие специалисты будут задействованы в проекте. Нужна ли будет разработка логотипа для вашего бизнеса, разработка дизайна, Сео продвижение и тд. Для более подробной консультации свяжитесь с нашим менеджером по телефону +38 (067) 737 0360 или в любом удобном мессенджере.

Все зависит от сложности проекта и ваших пожеланий. Чаще всего, если речь идет о разработке визитки - это может занять около недели. Интернет-магазин может занять до месяца. Для более подробной консультации свяжитесь с нашим менеджером по телефону +38 (067) 737 0360 или в любом удобном мессенджере.

Да. Технически мы гарантируем годовую поддержку бесплатно. В это входит исправление ошибок, обновление модулей, чистка от вирусов а также мелкие задачи.

При разработке сайта мы изначально его настраиваем под Google индексацию для дальнейшего продвижения. То есть после сдачи сайта, он не будет просто висеть в интернете, но для этого есть ряд рекомендация от наших специалистов которые мы дадим по завершению проекта. Для того чтобы заказать услугу продвижения сайта - свяжитесь с нашим менеджером по телефону +38 (067) 737 0360 или в любом удобном мессенджере.

Мы гарантируем бесплатное годовое обслуживание сайта, а также бесплатный домен и хостинг на целый год. А так же мы официальная веб студия и несем ответственность за все не только на словах, а и на документах.

Мы оказываем наши услуги по всей Украине. Мы уже сотрудничаем и оказываем услуги таких городах как: Киев, Днепр, Кировоград, Никополь, Полтава, Черкассы, Харьков ,Кременчуг и тд. , а также в дружественных странах, такие как: Польша,Казахстан Америка и тд.

Сколько может стоить сайт?

Сколько занимает времени разработка сайта?

Будет ли дальнейшая поддержка сайта?

Как дальше продвигать сайт?

Почему именно студия byShep ?

В каких городах вы оказываете услуги?