2016-03-16 3 views
0

Я попытался сделать страницу scrollto конкретного элемента с идентификатором, и это хорошо работает:JQuery scrollTo переменная

var $target = $('#people'); 
var scrolltop = $target.offset().top - 50; 
$('html, body').animate({ scrollTop: scrolltop }, 'slow'); 

Теперь я пытаюсь получить $ цель из URL с location.hash, но по какой-то причине это не сработает. Это мой код:

var $target = $(location.hash); 
var scrolltop = $target.offset().top - 50; 
$('html, body').animate({ scrollTop: scrolltop }, 'slow'); 

Если я проверить $ целевое значение является правильным, но я получаю эту ошибку: Cannot read property 'top' of undefined.

Любая идея, почему?

+0

Возможно, вы выполняете код, прежде чем ваша страница будет загружена полностью. –

+0

Hm. Он отлично работает для меня. – Hatchet

+1

__WARNING__: $ (location.hash) - это отраженная уязвимость XSS. функция jQuery создаст элементы html из первого параметра, если она похожа на html. Откройте для этого консоль javascript и введите $ («»). См. Https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) для праймера XSS. –

ответ

0

У меня была ошибка с другим фрагментом скрипта, который сломал код, который работал правильно.

В любом случае, я отправляю решение, если кому-то нужно что-то подобное.

if (location.hash) { 

    // take the hash from the url 
    var sectionUrl = location.hash; 


    // disable anchor “jump” when loading a page 
    setTimeout(function() { 
    window.scrollTo(0, 0); 
    }, 1); 


    // "jump" to the div with the location hash 
    setTimeout(function(){ 
    $('html, body').stop().animate({ 
      scrollTop: $(sectionUrl).offset().top - 50 
     }, 2000); 

    }, 1000) 

}