2013-05-29 3 views
1

Означает ли анимация свойство scrollTop неточно. Просьба проверить этот код, который я сделал в jsbin http://jsbin.com/ewulum/2/editанимация jQuery scrollTop не работает должным образом

что бы я хотел сделать, когда щелкнула ссылку, она автоматически прокрутится вниз до соответствующего раздела. Но я не могу понять, что не так с кодом, почему он не прокручивается до соответствующего раздела должным образом. Нажатие на первые две ссылки, похоже, работает нормально.

благодарит заранее.

+1

"При нажатии на первые две ссылки, кажется, работает хорошо." Да, потому что есть * комната * для прокрутки страницы. Обратите внимание на полосу прокрутки при нажатии, например. «Ссылка 5». Он бьет дно. Возможное решение: [добавить пробел] (http://jsbin.com/ewulum/3/edit). – jensgram

+0

спасибо, я посмотрю код – chanHXC

+0

, есть ли какое-нибудь обходное решение вместо добавления произвольных пробелов? Надеюсь, есть еще один способ обойти этот. – chanHXC

ответ

1

На самом деле это рабочая и анимационная jQuery scrollTop, работающая правильно. Просто добавьте height:2000px в body css. Когда вы нажимаете на третью, четвертую или пятую ссылку, она прокручивается вниз и, поскольку в разделе 5 нет места, чтобы остановить прокрутку. Добавьте место под ним или добавьте высоту на контейнер, чтобы решить вашу проблему.

+0

Почему добавление пространства решает проблему? не будет ли браузер автоматически давать/корректировать пространство для прокрутки страницы? – chanHXC

+0

Нет, когда вы нажимаете на пункт 5, он переходит к разделу 5, и больше нет места для прокрутки, поэтому он останавливается. Да, вы можете добавить дополнительное пространство, щелкнув по ссылке 5, затем удалите/отредактируйте это пространство, когда вам не нужно. Вы также можете установить overflow-y: hidden, поскольку пользователь не увидит свиток. – HADI

+0

еще раз спасибо. Я не заметил эту проблему прокрутки пробелов. @HADI благодарит много – chanHXC

0

Все кажется мне прекрасным. Наиболее актуальный код для перехода к конкретному элементу является:

$('html, body').animate({ scrollTop: $('#box').offset().top }, 2000); 

Вы можете добавить дополнительные пиксели, чтобы расположить его совершенно по мере необходимости.

$('html, body').animate({ scrollTop: $('#box').offset().top + 10 }, 2000); 

Я пошел в свой http://jsbin.com/ewulum/2/edit и сделал несколько изменений:

.wrapper { 
    width: 90%; 
    margin: 0 auto; 
    background:#ececec; 
    overflow: auto; 
    height: 250px; 
} 

JS файл

//event delegation 
$("#nav-wrapper").on("click", "a", function(e){ 

    var cur_el_href = $(this).attr("href"), 
     cur_el_top =$(cur_el_href).offset().top; 

    e.preventDefault(); 

    console.log("The current elem's href value is " + cur_el_href); 
    console.log("The target section's offset top is " + cur_el_top); 

$(".wrapper").animate({ 
    scrollTop:cur_el_top 
    }, 
    800, function(){ 
    //this callback is for demonstration only so as not to back to top when testing other links 
     $(this).animate({scrollTop:0}, 1000); 
    }); 

}); 
+0

Мне интересно, в чем смысл устанавливать таймер на функцию обратного вызова? btw, спасибо за ваш ответ. – chanHXC

+0

Ошибка Typo ..... я взял его. –

Смежные вопросы