Полностраничная прокрутка
Мне нужно было бы реализовать плавную прокрутку всей страницы. Я уже сделал это на этой странице:
Http://superhostitel.cz/sluzby
Но когда я прокручиваю с колесом больше, он будет прокручивать больше страниц. Пожалуйста, как я могу настроить прокрутку только одной страницы?
Мой код:
$(document).ready(function () {
var divs = $('.service');
var dir = 'up'; // wheel scroll direction
var div = 0; // current div
$(document.body).on('DOMMouseScroll mousewheel', function (e) {
if (e.originalEvent.detail > 0 || e.originalEvent.wheelDelta < 0) {
dir = 'down';
} else {
dir = 'up';
}
// find currently visible div :
div = -1;
divs.each(function(i){
if (div<0 && ($(this).offset().top >= $(window).scrollTop())) {
div = i;
}
});
if (dir == 'up' && div > 0) {
div--;
}
if (dir == 'down' && div < divs.length) {
div++;
}
//console.log(div, dir, divs.length);
$('html,body').stop().animate({
scrollTop: divs.eq(div).offset().top
}, 800);
return false;
});
$(window).resize(function () {
$('html,body').scrollTop(divs.eq(div).offset().top);
});
});
2 ответа:
Используйте предохранитель, чтобы предотвратить запуск обработчика более одного раза за раз, поднимите флаг при запуске выполнения функции, сбросьте его, когда анимация закончится.
Что-то в этом роде должно сработать (не проверял, но вы должны понять идею):
var running = false; var handler = function (e) { if (running) { return; } running = true; if (e.originalEvent.detail > 0 || e.originalEvent.wheelDelta < 0) { dir = 'down'; } else { dir = 'up'; } // find currently visible div : div = -1; divs.each(function(i){ if (div<0 && ($(this).offset().top >= $(window).scrollTop())) { div = i; } }); if (dir == 'up' && div > 0) { div--; } if (dir == 'down' && div < divs.length) { div++; } //console.log(div, dir, divs.length); $('html,body').stop().animate( { scrollTop: divs.eq(div).offset().top }, // properties 800, // duration "swing", // easing (needed to use 4th argument) function(){ running = false; } // animation complete callback ); return false; }; $(document.body).on('DOMMouseScroll mousewheel', handler );
Вы можете сделать это другим способом:
- Определите максимальное число страниц (fe) 10 страниц.
- Вы можете выбрать фактическую страницу, начиная с 1 (не 0 для удобного кодирования)
- отключить нормальную прокрутку.
- , Когда свиток называется и назначения не распространяется максимум страниц и опускается минимум страницу(не введите #0 страница) - свиток
- динамическое определение размера окна.
Хорошего вам дня.
Если вы хотите немного прокрутки на конкретном элементе-я рекомендую вам это
Примечание: используйте setInterval (f, 1000/60) для анимации, которая приводит пользователя к умножению высоты клиента и фактической страницы.