Я внедрил анимацию для своего фотолога. У меня все еще есть большая проблема, потому что элемент «body» активирует анимацию дважды.jQuery: элемент «body» активирует событие прокрутки дважды
Я думаю, что проблема связана с $ ('body'). Aimate. Поскольку я думаю, что когда тело оживляет, событие прокрутки будет активировано снова и, таким образом, вызовет событие дважды.
Проблема с моим кодом - прокрутка страницы вверх. Когда я просматриваю страницу вверх. ScrollAnimatePrev будет запускаться, а затем элемент $ ('body') будет анимироваться. После анимации для анимационной переменной установлено значение false. Но элемент $ ('body') запускает событие прокрутки, потому что я думаю, когда я устанавливаю scrollTop, запускается событие прокрутки. Итак, еще раз currentPos установлен в $ (window) .scrollTop(), тогда currentPos> previousPos возвращает true, и! Animating возвращает true, чтобы он запускал scrollAnimate.
Теперь я хочу исправить это. Как?
$(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;
}
)
}
})
Да, как вы решить эту проблему .. У меня есть уродливые взломать, это SetTimeout .. Я хочу, чтобы это было родовое И не полагаться на сроки ... –
Я думаю, что я перестал заковав одушевленные (); Я отредактирую свой ответ – alex
IC, ладно .. Спасибо Alex –