прокрутка до позиции, специфичной для div — jquery

#javascript #jquery #scroll

#javascript #jquery #прокрутка

Вопрос:

Я пытаюсь использовать этот код:

   function goToByScroll(id){

        id = id.replace("link", "");

        $('html,body').animate({
            scrollTop: $("#" id).offset().top},
            'slow');
    }

    $("#sidebar > ul > li > a").click(function(e) {

        e.preventDefault();

        goToByScroll($(this).attr("id"));           
    });
  

Проблема в том, что когда я нажимаю на определенный элемент списка, прокрутка поднимается до верхней части окна. Но в моем случае у меня фиксированный div вверху, поэтому содержимое скрыто этим div. Ну, я хочу, чтобы прокрутка останавливалась перед div.

есть идея?

ДЕМОНСТРАЦИЯ

Ответ №1:

Вам нужно присвоить верхней панели идентификатор (например, id =»header»), а затем вычесть его из атрибута scrollTop:

 $('html,body').animate({
    scrollTop: ($("#" id).offset().top-$('#header').outerHeight(true)) 'px'},
    'slow');
  

Вот рабочий пример.

Комментарии:

1. На самом деле, после небольшого размышления, я думаю, что использовал бы outerHeight(true) здесь, чтобы также соблюдались любые поля на #header .

Ответ №2:

 function goToByScroll(id){

        id = id.replace("link", "");

        $('html,body').animate({
            scrollTop: ($("#" id).offset().top - $("#YOUR_FIXED_DIV").height() ) },
            'slow');
    }

    $("#sidebar > ul > li > a").click(function(e) {

        e.preventDefault();

        goToByScroll($(this).attr("id"));           
    });
  

Комментарии:

1. это, безусловно, работает; Я думаю, вы бы хотели, чтобы outerHeight () допускал заполнение, и, возможно, outerHeight (true) допускал поля 😉