2013-09-13 3 views
0

У меня есть обработчик события перетаскивания, который запускает (1) анимацию и (2) настраивает счетчик. Когда я перетаскиваю цель, несколько обработчиков будут запускаться несколько раз, а счетчик ошибочен. Событие касания основано на Hammer.js.Избегайте дублирования обработки событий с анимацией внешней библиотеки

$(hammer).on('swipeleft',function(){ 
    doAnimation(); 
    counter++; 
} 

Обратите внимание, что обработчик может быть вызван для нескольких раз и потому, что несколько событий в непрерывных (длинных) сопротивлениях, и пользователя быстро волоча за несколько раз во время анимации (так что я не могу полагаться на «выпуск» событии ?).

Кроме того, doAnimation() завернута в отдельную библиотеку анимации, поэтому я не хочу испортить некоторые коды в этой библиотеке (если у меня нет других вариантов). Крайний случай, я использую функцию -webkit-перехода реализовать анимацию,

$(hammer).on('swipeleft',function(){ 
    $('.content').css('width',0);//-webkit-transition: all 0.5s ease; 
    counter++; 
} 

Как я могу справиться с такой ситуацией?

ответ

0

Вы можете сделать что-то вроде этого:

var isDraging = false; 

// -- Increment counter only if this is the first drag event: 
$(hammer).on('drag',function(){ 
    doAnimation(); 
    if(!isDraging) 
     counter++; 
    isDraging = true; 
} 

// -- When dropping, set flag to false again: 
$(hammer).on('drop',function(){ 
    isDraging = false; 
} 
+0

Ну, я могу использовать вводящие в заблуждение слова «перетаскивания». Я имею в виду «салфетки», и немедленная установка флага не очень хороша. Идеальный случай - установить флаг в doAnimation(), когда анимация завершена. – mrmoment