Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает плавная прокрутка к якорю после загрузки страницы (https://javascript.ru/forum/jquery/64184-ne-rabotaet-plavnaya-prokrutka-k-yakoryu-posle-zagruzki-stranicy.html)

emptyindorill 25.07.2016 10:39

Не работает плавная прокрутка к якорю после загрузки страницы
 
Здравствуйте. Для плавной прокрутки к якорю после загрузки страницы использую вот это:
window.hashName = window.location.hash;
  window.location.hash = '';
  
  $(window).load(function () {
	$('html, body').animate({scrollTop: $(window.hashName).offset().top}, 2000);
	return false;
  });

А консоль выдаёт мне ошибку Uncaught TypeError: Cannot read property 'top' of undefined.

Использую jquery-2.2.0.min.js

Я только-только начинаю учить javascript, посмотрел в гугле варианты ошибок - но так ничего и не понял. Подскажите пожалуйста - в чём может быть дело?

dd_smol 25.07.2016 11:05

window.hashName = window.location.hash; - Что это такое?:blink:

Uncaught TypeError: Не удается прочитать свойство 'top' не определено.
$(window.hashName).offset().top

emptyindorill 25.07.2016 11:20

Как я понял (тут взял) это проверка на наличие прокручиваемого тэга.

dd_smol 25.07.2016 11:43

нет такого элемента на странице и свойство что вы считываете нет. Можно html страницы на которой этот скрипт работает.

emptyindorill 25.07.2016 12:13

Что-то я вообще перестал понимать( Я забыл указать что у меня указан якорь - window.location.hash = '#anchor';
И прокрутка происходит, но не плавно а скачком - тут.
Ошибка та же - как тогда сделать что бы плавная прокрутка была?
Скрипт находится после футера.

Spass 25.07.2016 12:24

window.location.hash = '';
   
  $(window).load(function () {
    $('html, body').animate({scrollTop: $('#anchor').offset().top}, 2000);
    return false;
  });


Так тоже не работает?

emptyindorill 25.07.2016 13:12

Переход на якорь есть а плавности нету.
И то если так -
window.location.hash = '#anchor';

рони 25.07.2016 13:44

Цитата:

Сообщение от Spass
Так тоже не работает?

верните страницу вверх перед load.
window.scrollTo(0,0);
  $(window).load(function () {
    $('html, body').animate({scrollTop: $('#anchor').offset().top}, 2000);
    return false;
  });

emptyindorill 25.07.2016 14:01

Цитата:

Сообщение от рони (Сообщение 423361)
верните страницу вверх перед load.
window.scrollTo(0,0);
  $(window).load(function () {
    $('html, body').animate({scrollTop: $('#anchor').offset().top}, 2000);
    return false;
  });

Блин, и это не работает.

рони 25.07.2016 14:13

emptyindorill,
значит нет jquery или уже нет
попробуйте заменить все $ на jQuery

emptyindorill 25.07.2016 14:18

Uncaught TypeError: Cannot read property 'top' of undefined
У меня тут подключены ещё 2 библиотеки - Эта и эта. У меня тут ещё есть не работающий скрипт кнопки наверх.
Самое интересное что есть html с этими же подключёнными библиотеками и там всё работает, а тут нет оО

рони 25.07.2016 14:21

emptyindorill,
я пас ...

emptyindorill 25.07.2016 19:15

Получилось!
function scroll_to_elem(selector) {
    jQuery(selector).on('click', function (e) {
        e.preventDefault();
        var scroll_el = jQuery(this).attr('href');
        scroll_el = scroll_el.replace(/_/g, '');
        if (jQuery(scroll_el).length != 0) {
            jQuery('html, body').animate({scrollTop: jQuery(scroll_el).offset().top}, 500);
        }
        return false;
    });
}

function scroll_to_hash() {
            jQuery('html, body').animate({scrollTop: jQuery('#anchor').offset().top}, 500);
}
  jQuery(window).load(function () {

	scroll_to_hash();
	scroll_to_elem("[href^='#_']");
});


Часовой пояс GMT +3, время: 16:46.