Показать сообщение отдельно
  #1 (permalink)  
Старый 26.05.2020, 16:48
ab3 ab3 вне форума
Интересующийся
Отправить личное сообщение для ab3 Посмотреть профиль Найти все сообщения от ab3
 
Регистрация: 26.05.2020
Сообщений: 10

Слайдер модального Окна
Подскажите пожалуйста как настроить слайдер.подскажите почему увеличение(уменьшение) индекса работает только один раз,как сделать,что бы при нажатии правой стрелки он всегда увеличивался,а если нажать потом левую,то он перепрыгнет через кликнутое изображение и покажет через одно.Что не так в коде?
Вот мой код

import gallery from "./gallery-items.js";

const ul = document.querySelector(".js-gallery");
const lightBox = document.querySelector(".js-lightbox");
const imgLightBox = document.querySelector("img.lightbox__image");
const closeModalBtn = document.querySelector(
  'button[data-action="close-lightbox"]'
);

closeModalBtn.addEventListener("click", closeModal);
ul.addEventListener("click", openModal);

function buildGalleryItem({ preview, description, original }) {
  return `<li class="gallery__item">
      <a
        class="gallery__link"
        href=${preview}
      >
        <img
          class="gallery__image"
          src=${preview}
          data-source="${original}"
          alt=${description}
        />
      </a>
    </li>`;
}

function createGalleryList(data) {
  data.forEach((el) => {
    ul.insertAdjacentHTML("beforeend", buildGalleryItem(el));
  });
}

createGalleryList(gallery);

function closeModal() {
  lightBox.classList.remove("is-open");
  imgLightBox.src = "";
}

function openModal(e) {
  e.preventDefault();
  lightBox.classList.add("is-open");
  const img = e.target;
  const src = img.dataset.source;

  imgLightBox.src = src;

  window.addEventListener("keydown", handlePress);

  lightBox.addEventListener("click", handleClick);
}
function handleClick(e) {
  if (e.target === imgLightBox) {
    return;
  }
  closeModal();
}


function handlePress(e) {
const link = e.target.href;
const currentImage = gallery.find((item) => item.preview === link);
let index = gallery.indexOf(currentImage);

function ArrowLeft() {
index--;
index < 0 && (index = gallery.length - 1);

show(index);
}

function ArrowRight() {
index++;
index >= gallery.length && (index = 0);

show(index);
}

function show(i) {
imgLightBox.src = gallery[i].original;
}

if (e.code === "ArrowLeft") {
ArrowLeft();
}

if (e.code === "ArrowRight") {
ArrowRight();
}

if (e.code !== "Escape") {
return;
}
closeModal();

}

Последний раз редактировалось ab3, 26.05.2020 в 17:19.
Ответить с цитированием