Задать вопрос

Как подружить два .scrollTop?

Есть две задачи: 1 - плавный скрол до якоря(#id), 2 - плавный скрол наверх.
$(document).ready(function(){
	// 1-скрол
	/*var $page = $('html, body');
	$('a[href*="#"]').click(function() {
		$page.animate({
			scrollTop: $($.attr(this, 'href')).offset().top
		}, 400);
		return false;
	});*/
        //2-скрол
	var btn = $('.toTop');
	$(window).scroll(function() {
		if ($(window).scrollTop() > 950) {
			btn.addClass('showTop');
		} else {
			btn.removeClass('showTop');
		}
	});
	btn.on('click', function() {
		if($(document).scrollTop() !=0){
    	$('html, body').animate({ scrollTop: 0 }, 'slow');
		}
	});

})


по одиночке каждый скрипт работает идеально, но если использовать их вместе вылезает ошибка
Uncaught Error: Syntax error, unrecognized expression: #

Как подружить эти скрипты?
  • Вопрос задан
  • 66 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Скрипты между собой никак не конфликтуют, просто у вас первый скрипт кривой.
При клике на ссылку вида
<a href="#">Раз я никуда не веду, я должна быть кнопкой, а не ссылкой</a>
, выражение $($.attr(this, 'href')).offset().top превращается в $('#').offset().top и jQuery не знает что с этим делать.
Ответ написан
Комментировать
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Ошибка говорит о том, что вы пытаетесь выполнить вот такой код
$('#')
т.к. на странице есть кнопки, у которых href="#". Добавьте пред-условие
$('a[href*="#"]').click(function() {
    let id = $.attr(this, 'href');
    if (id.length <= 1) { return; }
    $page.animate({
      scrollTop: $(id).offset().top
    }, 400);
    return false;
  });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы