Не получается сделать прокрутку к якорю с сторонних страниц
Здравствуйте!
На главной странице есть блок с id "test". Хочу сделать на него переход с "прокруткой" из главного меню. Добавил скрипт: jQuery('a.scroll').click(function() { jQuery("html, body").animate({ scrollTop: jQuery(jQuery(this).attr('href')).offset().top + "px" }, { duration: 500 }); return false; }); Если ставлю в меню ссылку "#test" - то на главной все красиво работает, на остальных, естественно, нет (т.к. этот якорь только на главной)... Если ставлю ссылку вида "http://site/#test" - прокрутка не работает... Что делать? |
$('a.scroll').click(function(e) { e.preventDefault(); $("html, body").animate({ scrollTop: $('#' + $(this).attr('href').split('#').pop()).offset().top + "px" }, 500); }); |
переход к якорю при открытии страницы
Цитата:
var hash = window.location.hash; hash && jQuery("a[href='"+hash+"']").click(); |
Цитата:
|
Igorsrt,
ссылку в личку |
... браузер автоматом прокручивает к блоку, предложенный вариант "прокрутки" при загрузке страницы не помог, по словам ТС ... может у кого есть свои соображения.
jQuery('a.scroll').click(function() { jQuery("html, body").animate({ scrollTop: jQuery(jQuery(this).attr('href')).offset().top + "px" }, { duration: 500 }); return false; }); jQuery(window).on('load', function() { var hash = window.location.hash; hash && window.setTimeout(function() { window.scrollTo(0,0); jQuery("a[href='"+hash+"']").click() },80) }) |
Может просто другой скрипт поставить? Если сайт без jquery, то я использую скрипт ниже. Его достаточно. Переходит с любой страницы к любому якорю. На всех страницах скролл плавный. Кроме перехода к якорю с другой страницы. Там просто бросает к нему.
var linkNav = document.querySelectorAll('[href^="#"]'), V = 1; for (var i = 0; i < linkNav.length; i++) { linkNav[i].addEventListener('click', function(e) { e.preventDefault(); var w = window.pageYOffset, hash = this.href.replace(/[^#]*(.*)/, '$1'); t = document.querySelector(hash).getBoundingClientRect().top, start = null; requestAnimationFrame(step); function step(time) { if (start === null) start = time; var progress = time - start, r = (t < 0 ? Math.max(w - progress / V, w + t) : Math.min(w + progress / V, w + t)); window.scrollTo(0, r); if (r != w + t) { requestAnimationFrame(step) } else { location.hash = hash } } }, false); } |
Цитата:
|
madeas,
вопрос не в том как перейти к якорю, а наоборот как отменить переход к якорю при открытии страницы и заменить на кастомный, будет это на jquery или нет неважно, анимация она и в jquery сейчас на requestAnimationFrame. |
|
Часовой пояс GMT +3, время: 12:09. |