@solomonfox

Как создать плавный скрол к якорю на новой странице?

Мой код по клику на класс .menu-item-1689 пользователя переносит на место с классом .kol-scrol и т.д. Но если мы находимся на другой странице ничего не работает. Знаю, что нужно использовать хеш, не знаю, как. Видел вот эту статью: https://ru.stackoverflow.com/questions/735098/%d0%...
но не смог адаптировать свой код. Покажите, как должно быть, пожалуйста.
$('.menu-item-1689').on('click', function() {
  $('html,body').animate({scrollTop:$('.kol-scrol').offset().top+"px"},{duration:1E3});
});
$('.menu-item-1690').on('click', function() {
  $('html,body').animate({scrollTop:$('.pr-scrol').offset().top+"px"},{duration:1E3});
});
$('.menu-item-1691').on('click', function() {
  $('html,body').animate({scrollTop:$('.dost-scrol').offset().top+"px"},{duration:1E3});
});
$('.menu-item-1692').on('click', function() {
  $('html,body').animate({scrollTop:$('.onas-scrol').offset().top+"px"},{duration:1E3});
});
$('.menu-item-1693').on('click', function() {
  $('html,body').animate({scrollTop:$('.kont-scrol').offset().top+"px"},{duration:1E3});
});
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@solomonfox Автор вопроса
Получилось сделать прикладываю готовый код
$(document).ready(function(){
    $('body,html').scrollTop(0);
    $(".menu-item").on("click","a", function (event) {
        var id  = $(this).attr('href'),
            top = $(id).offset().top -70;
        $('body,html').animate({scrollTop: top}, 1500);
    });
    var hash = location.hash;
    if($(hash).length){
        var top = $(hash).offset().top -70;
        $('body,html').animate({scrollTop: top}, 1500);
    }
});
/* код 1 - выше работает с хешем и помогает перейти на тот якорь, на который нужно с новой страницы
.menu-item - класс пункта меню на который кликать можно. Ставьте любой. 
*/
$(function() {
  $('a[href*="#1"]:not([href="#"])').click(function() {
/*если у вас есть бутстрап на сайте, как у меня, то вам нужна эта проверка, тогда все якоря на которые должен быть скрол должны начинаться с #1 иначе модальные окна бутстрапа не будут работать*/
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
      if (target.length) {
        $('html, body').animate({
          scrollTop: target.offset().top
        }, 1500);
        return false;
      }
    }
  });
});
/* код 2 - выше скролит именно на главной странице к нужному якрою*/

Советую использовать код 1 и код 2 вместе если хотите скрол не только на главной но и на внутренних страницах. Фаил с js подключал перед закрывающим тегом body. Все работает на WP.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlexanderBashkin
@AlexanderBashkin
$('.menu-item-1689').on('click', function() {
  $('html,body').animate({scrollTop: $('.kol-scrol').offset().top}, 1000);
});
$('.menu-item-1690').on('click', function() {
  $('html,body').animate({scrollTop: $('.pr-scrol').offset().top}, 1000);
});
$('.menu-item-1691').on('click', function() {
  $('html,body').animate({scrollTop: $('.dost-scrol').offset().top}, 1000);
});
$('.menu-item-1692').on('click', function() {
  $('html,body').animate({scrollTop: $('.onas-scrol').offset().top}, 1000);
});
$('.menu-item-1693').on('click', function() {
  $('html,body').animate({scrollTop: $('.kont-scrol').offset().top}, 1000);
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы