Функция onscroll JS. Как убрать подергивания?

137
31 декабря 2020, 13:00

Имеется следующий код:

  $(window).scroll(function (e) {
      var body = document.body,
    html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, 
                       html.clientHeight, html.scrollHeight, html.offsetHeight );
dtcur = new Date();
dtcur=dtcur.getTime();
dtdiff = parseInt((dtcur-dt));
    var currentscrolled=parseInt($(this).scrollTop());
var browswidth = document.body.clientWidth+17;
var item1=parseInt($('#item-1').offset().top);
var item2=parseInt($('#item-2').offset().top);
var item3=parseInt($('#item-3').offset().top);
var item4=parseInt($('#item-4').offset().top);
var item5=parseInt($('#item-5').offset().top);
var item6=parseInt($('#item-6').offset().top);
if(browswidth<1100)
  {}
else{
  if((currentscrolled>item1&&currentscrolled<item2)||(currentscrolled>=item6) || currentscrolled==0)
    {$('#navbar').hide();}else{$('#navbar').show();}
if(dtdiff>1000 &&flag==0){

if(currentscrolled<0){$('body, html').animate({scrollTop:0},0);
}else{}
if(currentscrolled>scrolledlast){
if(posmax>pos){
  pos++;
}
var blockps = $('div.bg--'+pos).offset().top;
blockps=parseInt(blockps);
scrolledlast=currentscrolled
$('body, html').animate({scrollTop:blockps},800);
  }
  else{
if(posmin<pos){
  pos=pos-1;
}
if(pos==1){
$('body, html').animate({scrollTop:0},800);
}else{
   var blockps = $('div.bg--'+pos).offset().top;
blockps=parseInt(blockps);
scrolledlast=currentscrolled
$('body, html').animate({scrollTop:blockps},800);
}
  }
 dt= new Date();
  dt = dt.getTime();
}else{flag=0;}
scrolledlast=currentscrolled;
}}

Сделан он для того, чтобы сделать поблочный скролл- один div размером с экран монитора. При быстрой и/или частой прокрутке экран начинает дёргаться - как этого избежать?

Ссылка на сайт : http://lendsale.ru/stackoverflow/

Answer 1

Сложно разобраться, что именно не так с вашим кодом. Вот пример такого слайдера: https://jsfiddle.net/CLackyM/fcksq4L1/ Скорость реакции на окончание скролла вот здесь:

window.mainSliderScrollTimeout = setTimeout(function(){
    window.goNearestSlide();
},500);

А скорость анимации вот здесь:

$('html').animate({
    scrollTop:o
}, 500,"easeOutQuad", function () {
    console.log('scrll complete');
});

Чтобы сделать кнопки вперёд назад можно создать переменную для хранения текущего слайда и через функцию window.goSlide(x) переключать слайды

READ ALSO
&#39;hasOwnProperty&#39; is not a function. Что не так?

'hasOwnProperty' is not a function. Что не так?

Пытаюсь выявить наличие определенного параметра в url:

103
Ошибка в Google App Script при отправке данных формы в Google Sheets

Ошибка в Google App Script при отправке данных формы в Google Sheets

Цель - отправить данные формы в Google Sheets для записи в соответствующие поляЯ использовал эту статью, но мой скрипт выдает ошибку:

161
Выбрать первые 3 созданные экземпляра класса JavaScript

Выбрать первые 3 созданные экземпляра класса JavaScript

Всем привет! Возникла задача: Существует n кол-во дивов с одним классом и надо выбрать именно первые 3 div с помощью JS или JQНикак не могу найти...

117
Как уменьшить окно элемента `select`?

Как уменьшить окно элемента `select`?

Сейчас работаю с формой, где пользователь должен заполнить поля и выбрать тип из элемента selectНо при нажатие на select, отоброжается слишком...

128