Якорь на JS

dalurist

Создатель
Регистрация
16 Мар 2017
Сообщения
29
Реакции
0
DLE. Есть такой скрипт в конце main.tpl:
Код:
<script>
$(document).ready(function(){
  $('a[href^="#"], *[data-href^="#"]').on('click', function(e){
  e.preventDefault();
  var t = 1000;  
  var d = $(this).attr('data-href') ? $(this).attr('data-href') : $(this).attr('href');
  $('html,body').stop().animate({ scrollTop: $(d).offset().top }, t);
  });
}); </script>

Теперь переходя по ссылке href="#123" или с атрибутом "data-href="#123" в пределах этой страницы происходит плавная прокрутка до <div id=123>.
Если переходить с другой страницы сайта по ссылке на страницу href="/адрес_страницы#123" переход не плавный.
Как исправить? Спасибо.
 
Если переходить с другой страницы сайта по ссылке на страницу href="/адрес_страницы#123" переход не плавный.
Как исправить? Спасибо.
Код:
$(document).ready(function(){
if(window.location.hash != '' && $(window.location.hash).length > 0){
   $(document).scrollTop(0);
   $('html,body').animate({ scrollTop: $(window.location.hash).offset().top }, 1000);
  }
});
 
Последнее редактирование:
Теперь в пределах главной страницы не плавная....
 
Посмотрел. Во-первых, эти два скрипта нужно было совместить. Очевидно же.
HTML:
$(document).ready(function(){
  $('a[href^="#"], *[data-href^="#"]').on('click', function(e){
  e.preventDefault();
  var t = 1000;
  var d = $(this).attr('data-href') ? $(this).attr('data-href') : $(this).attr('href');
  $('html,body').stop().animate({ scrollTop: $(d).offset().top }, t);
  });

if(window.location.hash != '' && $(window.location.hash).length > 0){
   $(document).scrollTop(0);
   $('html,body').animate({ scrollTop: $(window.location.hash).offset().top }, 1000);
  }
});
Во-вторых, ^ - означает начало атрибута, а вы ждете, что скрипт сработает на
Код:
<a href="http://site.ru/#features">О сайте</a>
Правильно:
Код:
<a href="#features">О сайте</a>
И еще я бы делал проверку существования элемента, к которому хотите прокрутить, иначе при несуществующем элементе $(d).offset().top выпадеть в ошибку вроде TypeError: Cannot read property 'top' of undefined.
Код:
if($(d).length === 0){
   return;
}
Добавить под строку var d = $(this).attr('da......
 
Во-вторых, ^ - означает начало атрибута, а вы ждете, что скрипт сработает на
<a href="Для просмотра ссылки Войди или Зарегистрируйся">О сайте</a>
Правильно:
<a href="#features">О сайте</a>
Если оставить href="#features" плавная прокрутка только в пределах главной страницы, ссылка с другой страницы сайта не работает, если оставить href="site.ru/#features" то с другой страницы переходит плавно до якоря, а с главной стремительно без скролла... Посмотрите на сайте Для просмотра ссылки Войди или Зарегистрируйся в верхней кнопке О САЙТЕ в ссылке просто href="#features" , в кнопке О САЙТЕ которая над картинкой в меню "site.ru/#features".
 
Если оставить href="#features" плавная прокрутка только в пределах главной страницы, ссылка с другой страницы сайта не работает, если оставить href="site.ru/#features" то с другой страницы переходит плавно до якоря, а с главной стремительно без скролла... Посмотрите на сайте Для просмотра ссылки Войди или Зарегистрируйся в верхней кнопке О САЙТЕ в ссылке "site.ru/#features" в кнопке О САЙТЕ которая над картинкой в меню просто href="#features".
Ну, тогда пишите так:
Код:
<a data-href="#features" href="http://site.ru/#features">О сайте</a>
HTML:
$(document).ready(function(){
  $('a[href^="#"], *[data-href^="#"]').on('click', function(e){
    var t = 1000;
    var d = $(this).attr('data-href') ? $(this).attr('data-href') : $(this).attr('href');
    if($(d).length === 0){
      return;
    }
    e.preventDefault();
    $('html,body').stop().animate({ scrollTop: $(d).offset().top }, t);
  });

  if(window.location.hash != '' && $(window.location.hash).length > 0){
    $(document).scrollTop(0);
    $('html,body').animate({ scrollTop: $(window.location.hash).offset().top }, 1000);
  }
});
 
Назад
Сверху