Вопрос по JavaScript
8 повідомлень
#12 років тому
Приветствую!Нижеприведённый код позволяет прилеплять нужный контент на сайте к верхнему краю при прокрутке:
<script type="text/javascript">
$(function() {
var offset = $("#fixed").offset();
var topPadding = 20;
$(window).scroll(function() {
if ($(window).scrollTop() > offset.top) {
$("#fixed").stop().animate({marginTop: $(window).scrollTop() - offset.top + topPadding});
}
else {$("#fixed").stop().animate({marginTop: 0});};});
});
</script>
Как убрать эффект притормаживания?
Спасибо.
5330 повідомлень
#12 років тому
Не сам ли браузер тормозит?Js события не возникают мгновенно, просто поставьте счетчик что бы в лог писал время точное каждого вызова события scroll, сильно удивитесь.
124 повідомлення
#12 років тому
$(window).scroll(function() {
console.log('scrolled');
});
Посмотрите в консоль сколько раз вызывается это событие.
403 повідомлення
#12 років тому
Я может неправильно понял, но разве одного CSS fixed не хватит?А если по теме - это же jQuery, тормозит браузер = много add-on'ов навесили
183 повідомлення
#12 років тому
Пропускайте обработчик скролла через оптимизатор debounce. Идет в комплекте с underscore.js - посилання (хотя можно и выдрать отдельно)<script type="text/javascript">
//...
$(window).scroll(_.debounce(function() {
//...
},150));
</script>
вкратце: обработчик будет запускаться не с каждым событием скролла, а после последнего, если после него не скроллилось 150мс.