Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как на чистом JavaScript сделать, чтобы все ссылки на якоря страницы прокручивали до них плавно?

Например: у нас есть ссылка на якорь, расположенный на странице. При нажатии на ссылку, мы не "телепортируемся" к якорю, а страница плавно прокручивается.
Создание сайтовJavascriptHtml
  · 1,7 K
Лучший
Веб-разработчик на #php и #javascript, автор курсов по программированию. Нахожу единение...  · 28 февр 2022
Можно воспользоваться стандартной функцией:
html {
  scroll-behavior: smooth;
}
Но такой подход ограничен в версиях:
  • Chrome: 61.0
  • Edge: 79.0
  • Firefox: 36.0
  • Safari: 14.0
  • Opera: 48.0
Для cross-browser подхода можно написать простой скрипт:
<script src="[[https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js](https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js)]([https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js](https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js))"></script>
<script>
$(document).ready(function(){
  // Add smooth scrolling to all links
  $("a").on('click', function(event) {

    // Make sure this.hash has a value before overriding default behavior
    if (this.hash !== "") {
      // Prevent default anchor click behavior
      event.preventDefault();

      // Store hash
      var hash = this.hash;

      // Using jQuery's animate() method to add smooth page scroll
      // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area
      $('html, body').animate({
        scrollTop: $(hash).offset().top
      }, 800, function(){

        // Add hash (#) to URL when done scrolling (default click behavior)
        window.location.hash = hash;
      });
    } // End if
  });
});
</script>
И на Vanilla JavaScript:
const links = document.querySelectorAll("a");

for (const link of links) {
  link.addEventListener("click", clickHandler);
}

function clickHandler(e) {
  e.preventDefault();
  const href = this.getAttribute("href");
  const offsetTop = document.querySelector(href).offsetTop;

  scroll({
    top: offsetTop,
    behavior: "smooth"
  });
}
Пример на codepen