Быстрые щелчки приводят к некорректной работе слайд-представления?

0

Вот рабочая демонстрация. 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();
    }
});

спасибо

  • 0
    stop() сделает свое дело. :)
Теги:
slide

4 ответа

1
Лучший ответ

Проверьте, что ваш элемент в настоящее время анимируется следующим

if(!$('#myElement').is(':animated'))
{
    // Do your animation here
}
  • 0
    это сработало. Спасибо. jsfiddle.net/Evqqp/5
  • 0
    Пожалуйста!
1

Вы должны добавить

event.stopPropagation();

после:

$(".rightArrow").on("click", function () {

так:

$(".rightArrow").on("click", function () {
     event.stopPropagation();
     ... 
  • 0
    Не думай, что это что-то изменит. Проблема в очереди анимации, а не в обработчиках событий.
1

Всякий раз, когда вы работаете с анимацией, вы всегда должны stop() предыдущую анимацию элемента перед ее повторной анимацией.

$(".slideBox").stop(true, true).animate(...

http://jsfiddle.net/Evqqp/4/

  • 0
    Здесь есть проблема .. Если вы нажмете быстро, это приведет к пустому слайду.
  • 0
    @ksskr, потому что ваши расчеты неверны, а не потому, что анимация не исправлена. Вы не должны полагаться на присутствующую стрелку, чтобы предотвратить чрезмерную прокрутку пользователя. эта проверка должна быть в обработчике щелчка стрелок.
Показать ещё 1 комментарий
1

Попробуйте .stop(true,true)

$(".slideBox").stop(true,true).animate({

Ещё вопросы

Сообщество Overcoder
Наверх
Меню