2013-12-09 4 views
0

У меня проблема с карусели, которую я построил. Он содержит элементы внутри контейнера, которые перемещаются «влево» по размеру видимого контейнера при нажатии кнопки с перемещением класса moveCarouselRight.Выпуск события анимации карусели

Проблема заключается в том, что, когда пользователь нажимает слишком быстро, т.е. двойной щелчок, анимация, похоже, срабатывает дважды, что означает, что элементы не установлены надлежащим образом в контейнере, как если бы первая «левая» операция не была завершена.

Как вы можете видеть, я попытался исправить это с помощью «отключенного» флага, но кажется, что второе событие щелчка запускается до того, как js из первого события достигло этой строки кода.

var disabled = false; 

$('.moveCarouselRight').on('click', function() { 

if (!disabled) { 

    disabled = true; 

    //change css property 'left' depending on container size 

    disabled = false; 
} 
}); 

Ссылка на jsFiddle:
jsfiddle.net/6TPcT/5

+0

Вы уверены, что вы сделали disabled flag global – Pete

+0

Флаг отключен глобально –

+2

Вы используете элемент '' для получения клика? – srquinn

ответ

2

Используйте это:

JS

$(".moveCarouselRight").dblclick(function(event){ 
    event.preventDefault(); 
}); 

ИЛИ

$(".moveCarouselRight").dblclick(function(event){ 
    return false; 
}); 

ИЛИ

$(".moveCarouselRight").one("click", function(event) { 
    //do something 
}); 

Ссылка: http://api.jquery.com/one/

+0

Хорошая идея, хотя по какой-то причине, когда я дважды нажимаю на элемент, он также производит два клика, должен ли предотвратить по умолчанию не обрабатывать это? –

+0

Он должен или вы можете попробовать 'return false;' – Ani

+0

Даже когда я использую return false, консоль js показывает два клика на обработчик события «click» и один на обработчик «dblclick» –

0

Я зафиксировал это путем связывания события щелчка на селектор на нагрузке:

$('.selector').click(moveLeft); 

В методе я развязал щелчок случай:

function moveLeft() { 
    $(this).unbind('click'); 
    //css transition stuff 
} 

Затем я добавил слушатель к концу Css переходов:

$("selector").bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){ 
    $(this).siblings('.nextThree').click(moveThreeRight); 
}); 

Работает очарование :)

Спасибо за помощь в этом

Смежные вопросы