Я реализовал анимацию для своего фотоблога. У меня все еще большая проблема, потому что элемент body активирует анимацию дважды.
Я думаю, что проблема связана с $ ('body'). Animate. Потому что я думаю, что когда тело анимируется, событие прокрутки будет снова активировано, и, таким образом, событие будет активировано дважды.
Проблема моего кода заключается в прокрутке страницы вверх. Когда я прокручиваю страницу вверх. Будет активирован scrollAnimatePrev, а затем элемент $ ('body') оживит себя. После анимации для переменной анимации устанавливается значение false. Но элемент $ ('body') запускает событие прокрутки, потому что я предполагаю, что когда я устанавливаю scrollTop, событие прокрутки срабатывает. Таким образом, снова для currentPos устанавливается значение $ (window) .scrollTop (), а затем currentPos> previousPos возвращает значение true, а!
Теперь я хочу это исправить. Как?
$(function() {
var record = 0;
var imgHeight = $(".images").height();
var offset = $(".images").eq(0).offset();
var offsetHeight = offset.top;
var previousPos = $(window).scrollTop();
var animating = false;
var state = 0;
$(window).scroll(function() {
var currentPos = $(window).scrollTop();
console.log(currentPos);
if(currentPos > previousPos && !animating) {
record++;
scrollAnimate(record, imgHeight, offsetHeight);
animating = true;
} else if (currentPos < previousPos && !animating) {
record--
scrollAnimatePrev(record, imgHeight, offsetHeight);
animating = true;
}
previousPos = currentPos;
console.log(previousPos)
})
function scrollAnimate(record, imgHeight, offsetHeight) {
$('body').animate(
{scrollTop: (parseInt(offsetHeight) * (record+1)) + (parseInt(imgHeight) * record)},
1000,
"easeInOutQuart"
)
.animate(
{scrollTop: (parseInt(offsetHeight) * (record)) + (parseInt(imgHeight) * (record))},
1000,
"easeOutBounce",
function() {
animating = false;
}
)
}
function scrollAnimatePrev(record, imgHeight, offsetHeight) {
$('body').animate(
{scrollTop: ((parseInt(imgHeight) * record) + (parseInt(offsetHeight) * record)) - offsetHeight},
1000,
"easeInOutQuart"
)
.animate(
{scrollTop: ((parseInt(imgHeight) * record) + (parseInt(offsetHeight) * record))},
1000,
"easeOutBounce",
function() {
animating = false;
}
)
}
})