Почему страница прокручивается вверх при нажатии на миниатюру галереи? - PullRequest
1 голос
/ 10 июня 2019

У меня есть фотогалерея, которая делает странное поведение, которое я не могу понять. При нажатии на эскиз, который должен показать мне изображение, он не только делает это, но и прокручивает страницу вверх. Если галерея отображается немного ниже верхней части экрана, она будет прокручиваться вверх, а если она проходит через верхнюю часть экрана, она будет прокручиваться вниз, пока верхняя часть раздела Галерея не будет совмещена с верхней частью экран.

Я попытался повторить то, что сделал на codepen: https://codepen.io/dmontesi/pen/VJZeVq. Я использую только SCSS / HTML.

<!-- Gallery -->
<section class="wrapper">
    <div class="wrapper__gall">
        <ul class="slides">
            <li id="slide1"><img src="https://cdn.pixabay.com/photo/2016/06/24/11/49/architecture-1477103_960_720.jpg" alt="" /></li>
            <li id="slide2"><img src="https://cdn.pixabay.com/photo/2016/06/24/11/48/architecture-1477101_960_720.jpg" alt="" /></li>
            <li id="slide3"><img src="https://cdn.pixabay.com/photo/2016/06/24/11/46/architecture-1477099_960_720.jpg" alt="" /></li>
        </ul>
        <ul class="thumbnails">
            <li>
                <a href="#slide1"><img src="https://cdn.pixabay.com/photo/2016/06/24/11/49/architecture-1477103_960_720.jpg" /></a>
            </li>
            <li>
                <a href="#slide2"><img src="https://cdn.pixabay.com/photo/2016/06/24/11/48/architecture-1477101_960_720.jpg" /></a>
            </li>
            <li>
                <a href="#slide3"><img src="https://cdn.pixabay.com/photo/2016/06/24/11/46/architecture-1477099_960_720.jpg" /></a>
            </li>
        </ul>
    </div>
</section>

Я только хочу, чтобы он показывал следующий слайд и не перемещал позицию пользователя на экране.

1 Ответ

0 голосов
/ 10 июня 2019

(Вы можете увидеть полный код здесь: Codepen )

Вопрос:

Почему, когда вы нажимаете навигационную ссылку, она прокручивается до верхней части изображения? и как это предотвратить?

Ответ:

Ну, это естественное поведение ссылки. это называется якорной ссылкой.

если вы используете <a href="#slide1">, когда пользователь нажимает на него, страница прокручивается до элемента с id = slide1.

Вы можете предотвратить это (добавив onclick="event.preventDefault()"), но это означает, что вы больше не можете использовать правило css :target. это означает, что целевое изображение больше не будет отображаться поверх других изображений.

Вместо этого вы можете использовать JavaScript, чтобы контролировать полное поведение.

  1. Добавьте обработчик onclick к ссылкам навигации:
<a href="#slide1"  onclick='navigate(event)'>
  1. Вы должны написать функцию навигации по JavaScript. эта функция должна дать класс active из текущего элемента active и присвоить его нажатому. как это:
function navigate(event){
  //get active element
  var active = event.target.closest(".wrapper").getElementsByClassName("active")[0];
  //remove class "active" from active element
  if(active)active.classList.remove("active");
  //get target element from link
  var target = document.getElementById(event.target.closest("a").getAttribute("href").replace("#",""));
  //add class "active" to the target
  target.classList.add("active");
  //prevent default link behaviour
  event.preventDefault();
}
  1. тогда мы должны написать правило css для активного изображения (оно заменено селектором li:target.):
.slides li.active {
  z-index: 3;
}
.slides li:not(.active) {
  z-index: 0;
}

(Вы можете увидеть полный код здесь: Codepen )

...