Вот рабочая демонстрация. http://jsfiddle.net/Evqqp/1/
Пожалуйста, проверьте демо, чтобы легко понять проблему. Нажмите на стрелки быстро, и вы увидите, как беспорядок открывается.
Я понимаю, что это может быть из-за анимации 300 мс, которую я делаю. Что такое чистый способ обработки кликов, чтобы он не испортил представление. Я могу использовать флаг, чтобы проверить, выполнено ли действие предыдущего клика. Но я хотел искать мнения, если есть лучший способ сделать это.
Код, в котором я выполняю анимацию
$(".rightArrow").on("click", function () {
if ((Math.abs(parseInt($(".slideBox").css("margin-left"))) + $(".mainDiv").width()) < $(".slideBox").width()) {
$(".slideBox").animate({
"margin-left": parseInt($(".slideBox").css("margin-left")) - $(".mainDiv").width()
}, 300, checkRightArrow);
$(".leftArrow").show();
} else {
$(".rightArrow").hide();
}
});
спасибо
Проверьте, что ваш элемент в настоящее время анимируется следующим
if(!$('#myElement').is(':animated'))
{
// Do your animation here
}
Вы должны добавить
event.stopPropagation();
после:
$(".rightArrow").on("click", function () {
так:
$(".rightArrow").on("click", function () {
event.stopPropagation();
...
Всякий раз, когда вы работаете с анимацией, вы всегда должны stop()
предыдущую анимацию элемента перед ее повторной анимацией.
$(".slideBox").stop(true, true).animate(...
Попробуйте .stop(true,true)
$(".slideBox").stop(true,true).animate({
stop()
сделает свое дело. :)