плавная прокрутка
function GetURLParameter(sString, sParam) {
if (sString.split("?")[1]) {
var sURLVariables = sString.split("?")[1].split('&');
for (var i = 0; i < sURLVariables.length; i++) {
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam) {
return sParameterName[1];
}
}
}
}
var URL = window.location.href;
if (GetURLParameter(URL, "id")) {
setTimeout(function() {
scrollToSection(GetURLParameter(URL, "id"), 0);
}, 500);
}
//Прокрутка до блока при клике по выпадающему меню текущей страницы
$(document).on("click", ".header-nav__dropdown li a", function(e) {
var dropdownParent = $(this).closest(".header-nav__list>ul>li");
if (dropdownParent.hasClass("isActive")) {
var linkHref = $(this).attr("href");
if (GetURLParameter(linkHref, "id")) {
e.preventDefault();
scrollToSection(GetURLParameter(linkHref, "id"));
$(this).closest(".header-nav__dropdown").hide({
duration: 100,
complete: function complete() {
$(this).removeAttr("style");
}
});
}
}
});
function scrollToSection(id) {
var duration = arguments.length <= 1 || arguments[1] === undefined ? 800 : arguments[1];
var delta = $(window).width() < 768 ? 0 : $(".header-nav").outerHeight();
$("html,body").animate({
scrollTop: $("#" + id).offset().top - delta
}, duration);
}
не работает плавная прокрутка, после изменения ссылок, раньше было вот так <li><a href="[[!getAliasRegion]]/[[~11]]?id=main_start">Наши достижения</a></li>, сейчас изменил на <li><a href="[[!getAliasRegion]]/[[~11]]#наши-достижения">Наши достижения</a></li>, что мне поправить в функции что бы плавная прокрутка снова заработала ? |
Цитата:
|
да не работает, там функция GetURLParameter не правильно берёт юрл
|
Цитата:
|
Цитата:
|
Цитата:
|
конечно
|
$('html,body').animate({
scrollTop: $(`${target},a[name="${target.slice(1)}"]`).offset().top - delta //тут выстреливает ошибку
}, duration);
};
if (location.hash) {
scrollTo(location.hash);
}
в этих строчках показывает ошибку, сил уже никаких нет ) бьюсь с этим скролом недели 3 |
venom1996,
пост#8 строка 0 target = decodeURI(target); |
venom1996,
смотрите, что у вас не так?
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
div{
height: 500px;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(() => {
const scrollTo = (target, duration = 800) => {
if (!target) {
return;
}
const delta = $(window).width() < 768 ? 0 : $('.header-nav').outerHeight();
target = decodeURI(target);
$('html,body').animate({
scrollTop: $(`${target},a[name="${target.slice(1)}"]`).offset().top - delta
}, duration);
};
if (location.hash) {
scrollTo(location.hash);
}
$(document).on('click', '.header-nav__dropdown li a', function(e) {
const $this = $(this);
const hash = (this.href || '').split('#').pop();
if ($this.closest('.header-nav__list > ul > li').hasClass('isActive') || !hash) {
return;
}
e.preventDefault();
scrollTo('#' + hash);
$this.closest('.header-nav__dropdown').hide({
duration: 100,
complete: function () {
this.removeAttribute('style');
}
});
});
});
</script>
</head>
<body>
<header class="header-nav">header-nav</header>
<ul class="header-nav__dropdown">
<li><a href="#начало">Начало</a></li>
<li><a href="#наши-достижения">Наши достижения Click me!</a></li>
</ul>
<div id="начало">начало</div>
<div id="наши-достижения">наши-достижения</div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 04:22. |