У меня не было последовательного успеха с этими решениями.
Видимо из-за того, что скачок происходит раньше, чем Javascript =>
ссылка (http://forum.jquery.com/topic/preventing-anchor-jump)
Мое решение - по умолчанию с помощью CSS расположить все якоря наверху.
.scroll-target{position:fixed;top:0;left:0;}
Затем используйте jquery для прокрутки до родительского объекта целевого якоря или одноуровневого элемента (возможно, пустого тега em)
<a class="scroll-target" name="section3"></a><em> </em>
Пример jquery для прокрутки, когда URL вводится с помощью хеша
(страница не должна быть уже загружена в окно / вкладку, это относится к ссылкам из других / внешних источников)
setTimeout(function() {
if (window.location.hash) {
var hash = window.location.hash.substr(1);
var scrollPos = $('.scroll-target[name="'+hash+'"]').siblings('em').offset().top;
$("html, body").animate({ scrollTop: scrollPos }, 1000);
}
}, 1);
Также вы захотите запретить клики привязки по умолчанию на странице, а затем прокрутить до их целей
<a class="scroll-to" href="#section3">section three</a>
и JQuery
$('a.scroll-to').click(function(){
var target = $(this).attr('href').substr(1);
var scrollPos = $('.scroll-target[name="'+target+'"]').siblings('em').offset().top;
$("html, body").animate({ scrollTop: scrollPos }, 1000);
return false;
});
Хорошая особенность этого метода заключается в том, что целевые теги привязки остаются структурно рядом с соответствующим контентом, хотя их CSS-позиция находится сверху.
Это должно означать, что сканеры поисковых систем не будут иметь проблем.
Ура, я надеюсь, что это помогает
Серый