Как удалить #id из URL-адреса при использовании CSS scroll-behavior - PullRequest
0 голосов
/ 07 мая 2020

На моем веб-сайте есть раздел с прокруткой вверх. Но поскольку большинство сайтов достигают этого с помощью jQuery scrollTop, я использовал последнюю CSS scroll-behavior: smooth;. Теперь, как это работает, я присвоил своему тегу body id blog.

например, <body id="blog">

и кнопка прокрутки вверх, например:

<a id="move-to-top" href="#blog">Scroll</a>

Теперь это работает отлично, и у меня плавный прокрутите мой сайт. Но когда кто-то нажимает кнопку Scroll To Top , URL-адрес получает #blog, что мне не нравится.

Мне было интересно, есть ли способ удалить #blog URL-адреса, когда кто-то нажимает на кнопку.

Если я сделаю следующее:

document.getElementById("move-to-top").addEventListener( "click", (e) => {
  e.preventDefault()
} )

Прокрутка вверх перестает работать, так как я предотвращаю дефолт. Я понятия не имею, как еще я могу это сделать. Любое руководство будет полезно.

Ответы [ 2 ]

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

Вы можете использовать JQuery функцию анимации

$('html,body').animate({scrollTop: $("#blog").offset().top},'slow');

Или вы можете использовать JavaScript scrollIntoView

document.getElementById('blog').scrollIntoView(true);

Полученный ответ от henser

Если вы просто хотите избавиться от тега #tag из своего URL-адреса, вы можете использовать состояние замены истории

document.getElementById("move-to-top").addEventListener( "click", (e) => {
  history.replaceState([],"",window.location.href.split('#')[0])
});
0 голосов
/ 07 мая 2020

Как видите, это использует Javascript на go наверх, а не ссылку

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 20px;
}

#myBtn {
  display: none;
  position: fixed;
  bottom: 20px;
  right: 30px;
  z-index: 99;
  font-size: 18px;
  border: none;
  outline: none;
  background-color: red;
  color: white;
  cursor: pointer;
  padding: 15px;
  border-radius: 4px;
}

#myBtn:hover {
  background-color: #555;
}
</style>
</head>
<body>

<button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>

<div style="background-color:black;color:white;padding:30px">Scroll Down</div>
<div style="background-color:lightgrey;padding:30px 30px 2500px">This example demonstrates how to create a "scroll to top" button that becomes visible 
  <strong>when the user starts to scroll the page</strong>.</div>

<script>
//Get the button
var mybutton = document.getElementById("myBtn");

// When the user scrolls down 20px from the top of the document, show the button
window.onscroll = function() {scrollFunction()};

function scrollFunction() {
  if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
    mybutton.style.display = "block";
  } else {
    mybutton.style.display = "none";
  }
}

// When the user clicks on the button, scroll to the top of the document
function topFunction() {
  document.body.scrollTop = 0;
  document.documentElement.scrollTop = 0;
}
</script>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...