N + 1 дюйм javascript не работает должным образом - PullRequest
0 голосов
/ 28 мая 2020

Я получил эту галерею img из другого вопроса в Stack Overflow, и я добавил несколько кнопок, чтобы иметь возможность изменять текущий img на +1 и -1.

Однако это не совсем работает, что я делаю что-то не так? - Javascript

var slideIndex = 1;
let wrappers = document.querySelectorAll(".wrapper");
wrappers.forEach(function(el) {
  showSlides(slideIndex, el);
});



// Next/previous controls
function plusSlides(n) {
  showSlides(slideIndex += n);
}

// Thumbnail image controls
function currentSlide(el, n) {
  // Get the wrapper element and pass it as a variable to showSlides
  let wrapper = el.closest(".wrapper");
  showSlides(slideIndex = n, wrapper);
}

function showSlides(n, wrapper) {
  var i;
  // find only the slides and dot that are decedents of current wrapper
  var slides = wrapper.querySelectorAll(".mySlides");
  var dots = wrapper.querySelectorAll(".demo");
  if (n > slides.length) {
    slideIndex = 1
  }

  if (n < 1) {
    slideIndex = slides.length
  }

  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }

  for (i = 0; i < dots.length; i++) {
    dots[i].className = dots[i].className.replace("active", "");
  }

  slides[slideIndex - 1].style.display = "block";
  dots[slideIndex - 1].className += " active";
}

1 Ответ

1 голос
/ 30 мая 2020

В вызове функции showSlides() в plusSlides() отсутствует контекст оболочки. Измените его на:

function plusSlides(el,n) {
  showSlides(slideIndex += n, el.closest('.wrapper'));
}

и добавьте ссылку на сам элемент (this) в вызов функции в тегах <a>:

<a class="prev" onclick="plusSlides(this,-1)">❮</a>
<a class="prev" onclick="plusSlides(this,1)">❯</a>

var slideIndex = 1;
let wrappers = document.querySelectorAll(".wrapper");
wrappers.forEach(function(el) {
  showSlides(slideIndex, el);
});



// Next/previous controls
function plusSlides(el,n) {
  showSlides(slideIndex += n,el.closest('.wrapper'));
}

// Thumbnail image controls
function currentSlide(el, n) {
  // Get the wrapper element and pass it as a variable to showSlides
  let wrapper = el.closest(".wrapper");
  showSlides(slideIndex = n, wrapper);
}

function showSlides(n, wrapper) {
  var i;
  // find only the slides and dot that are decedents of current wrapper
  var slides = wrapper.querySelectorAll(".mySlides");
  var dots = wrapper.querySelectorAll(".demo");
  if (n > slides.length) {
    slideIndex = 1
  }

  if (n < 1) {
    slideIndex = slides.length
  }

  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }

  for (i = 0; i < dots.length; i++) {
    dots[i].className = dots[i].className.replace("active", "");
  }

  slides[slideIndex - 1].style.display = "block";
  dots[slideIndex - 1].className += " active";
}
.container3 {
position:absolute;
height:100px;
width:20%;
margin:auto;
right:0;
left:0;
}
.bb{
  height:100px;
    background: center center no-repeat;
    background-size: cover;
}

.mySlides {
  display: none;
}

.cursor {
  cursor: pointer;
}

.row {
  width:100%;
  display:flex;
}
.demo {
  opacity: 0.6;
}

.active,
.demo:hover {
  opacity: 1;
}
/* Next & previous buttons */
.prev,
.next {
  cursor: pointer;
  position: absolute;
  top: 40%;
  width: auto;
  padding: 16px;
  margin-top: -50px;
  color: white;
  font-weight: bold;
  font-size: 20px;
  border-radius: 0 3px 3px 0;
  user-select: none;
  -webkit-user-select: none;
}

/* Position the "next button" to the right */
.next {
  right: 0;
  border-radius: 3px 0 0 3px;
}

/* On hover, add a black background color with a little bit see-through */
.prev:hover,
.next:hover {
  background-color: rgba(0, 0, 0, 0.8);
}
image
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...