Вы можете использовать этот трюк: определить логическую переменную scrolling
, которые вы установили в верно, когда вы делаете анимацию, проверить его, и установить его в ложное, когда анимация закончена:
var currentTop = 0;
var scrolling = false;
$('.contactDiv').on('scroll touchmove mousewheel', function(e){
if (!scrolling) {
e.preventDefault();
e.stopPropagation();
currentTop = currentTop + 70;
scrolling = true;
$('.contactDiv').animate({
scrollTop: currentTop
}, 500, function(){
scrolling = false;
});
return false;
}
});
Редактировать:
Если у вас есть событие прокрутки, выпущенное сразу после окончания анимации, оно действительно запустится до тех пор, пока оно не достигнет дна .contactDiv
. Тем не менее, вы можете предотвратить это с дополнительным переменным (здесь называется allowNextAnimation
):
jsFiddle demo
var currentTop = 0;
var scrolling = false;
var allowNextAnimation = true;
$('.contactDiv').on('scroll touchmove mousewheel', function(e){
if (!scrolling && allowNextAnimation) {
currentTop = currentTop + 70;
scrolling = true;
$('.contactDiv').animate({
scrollTop: currentTop
}, 500, function(){
scrolling = false;
allowNextAnimation = false;
});
return false;
}
allowNextAnimation = true;
});
где у вас есть intialise 'currentTop' .. ???? –
внутри animate() вы снова прокручиваете. Это вызовет событие прокрутки .... –
ah его перед функцией. позвольте мне отредактировать – RickyHalim