Как убрать #lorem из URL

531
17 февраля 2017, 01:31

Проблема в следующем. На сайте реализованы плавные якорные ссылки через https://github.com/cferdinandi/smooth-scroll Я дилетант в джаваскрипте и jQuery, поэтому не могли бы вы, пожалуйста, подсказать, каким образом можно реализовать это не через hash или как убрать "#"?

Answer 1

Сделал минималистический пример на jQuery. В ссылку через # записывается id блока, к которому нужно перейти, однако в URL хеши не добавляются. Работает для любой ссылки на странице, в которой указан id блока для перехода.

// Page a Link Smooth Scrolling 
$("[href^='#']").click(function() { 
var idtop = $($(this).attr("href")).offset().top; 
$('html,body').animate( 
    // Time animation 
    {scrollTop: idtop}, 500); 
return false; 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<style> 
div{height:100vh} 
#block1{background: #000} 
#block1 a{color: #fff} 
</style> 
 
<div id="block1"> 
<a href="#block2">скролл к следующему блоку</a> 
</div> 
<div id="block2"> 
<a href="#block1">скролл к предыдущему блоку</a> 
</div>

Answer 2

Этот плагин специально построен таким образом, чтобы обрабатывать переход по кликам сохраняя их в историю. Если вам нужен просто плавный переход, может проще сделать его самому? Вот код, это очень просто:

$('body').on('click', '.smooth-scroll-class', function(){
     //по href ищем элемент с нужным id и определяем его позицию
     pos = $( $(this).attr('href') ).offset();
     if (pos) {
        //скролим на эту позицию
        $("html, body").animate({scrollTop: pos.top}, 600);
        //отключаем стандартный переход по ссылке
        return false; 
     }
})

Так можно сделать ссылку не на <a name='hashlink'> a на <.. id='hashlink'> Те не надо создавать якоря, достаточно прописать id нужному элементу.

Можно так-же и искать якорь

$('body').on('click', '.smooth-scroll-class', function(){
     //по href ищем якорь с нужным именем
      pos = $('a[name=' + $(this).attr('href').replace(/^#/,'') + ']').offset();
     if (pos) {
         //скролим на эту позицию
         $("html, body").animate({scrollTop: pos.top}, 600);
         //отключаем стандартный переход по ссылке
         return false; 
     }
})

Живой тест:

    $('body').on('click', '.smooth-scroll', function() { 
 
      pos = $('a[name=' + $(this).attr('href').replace(/^#/,'') + ']').offset(); 
      if (pos) { 
        $("html, body").animate({ 
          scrollTop: pos.top 
        }, 600); 
 
        return false; 
      } 
    })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<a href="#bottom" class='smooth-scroll'>скролл вниз</a> 
<div style="height:2000px"></div> 
<a name='bottom'></a>

READ ALSO
Центрирование блоков внутри блока

Центрирование блоков внутри блока

Доброго времени сутокХочу реализовать следующее (см

504
Вывод sql из div блока

Вывод sql из div блока

Здравствуйте, связался с одной проблемойИз JS у меня выводит в DIV блок число и надо вставить в переменную значение, которое вывело в DIV

481
Создание страниц с самого сайта [требует правки]

Создание страниц с самого сайта [требует правки]

Здравствуйте, как можно сделать так, чтоб пользователь мог сам добавлять страницы на сайт? Чтобы на странице отображались ссылки, созданные...

351
Уведомления для сайта php

Уведомления для сайта php

Нужно сделать систему уведомлений для пользователей сети на сайтеТекст уведомлений заранее должен составляться администратором

523