Выполнение jQuery onClick

У меня есть этот фрагмент javascript, написанный с помощью jQuery 1.2.5. Он содержится внутри функции main () написанного мной плагина. Плагин представляет собой горизонтальный скроллер галереи, очень похожий на jCarousel. Он выполняет множество автоматических вычислений ширины и определяет, сколько прокручивать на основе этого и размера изображений, что и является тем, что все вычисления, которые происходят.

Какой у меня вопрос, как мне предотвратить срабатывание этого сигнала до завершения предыдущего выполнения. Например, если я получаю небольшое удовольствие от щелчка и просто лихорадочно разминаю .digi_next. Когда это происходит, с пользовательским интерфейсом дела идут не так хорошо, и я хотел бы это исправить :) Я думал, что ответ может лежать в queue, но все мои попытки его использовать не дали ничего стоящего.

    var self = this;
    $(".digi_next", this.container).click(function(){

        var curLeft = $(".digi_container", self.container).css("left").split("px")[0];
        var newLeft = (curLeft*1) - (self.containerPad + self.containerWidth) * self.show_photos;

        if (newLeft < ((self.digi_gal_width - (self.containerPad + self.containerWidth) * self.show_photos)) * -1) {
            newLeft = ((self.digi_gal_width - (self.containerPad + self.containerWidth) * self.show_photos)) * -1;
        }

        $(".digi_container", self.container).animate({
            left: newLeft + "px"
        }, self.rotateSpeed);
    });

примечание: я настоятельно рекомендую jQuery v1.2.6, так как выпуск для 1.2.5 был искажен, а в 1.2.6 есть важные исправления ошибок

John Sheehan 23.09.2008 22:53

Я разберусь, спасибо. Я просто использовал 1.2.5, потому что он входит в наше решение и у меня нет возможности изменить его, но я знаю, кто его использует ...>.>

Wes P 23.09.2008 23:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
21 411
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вы можете передать функцию, которую вы написали в этом посте, в качестве обратного вызова для функции, которая запускалась ранее.

Надеюсь это поможет.

С Уважением

Ответ принят как подходящий

Просто используйте глобальный флаг занятости. Когда вы вводите свой обработчик кликов, проверьте его и продолжайте, только если он ложный. Немедленно установите для него значение true, а затем снова установите значение false, когда анимация закончится. JavaScript является однопоточным, поэтому беспокоиться не о чем.

var busy = false;
$("...").onclick(function() {
    if (busy) return false;
    busy = true;
    $("...").animate(..., ..., ..., function() {
        busy= false;
    });
    return false;
});

Взгляните на jQuery UI. В частности, часть эффектов плагина. Я использую слайд-эффект на мой личный сайт (щелкайте стрелки по бокам полей).

Я не позволяю пользователям запускать эффект более одного раза - до того, как эффект закончится - с помощью один обработчик событий и функции обратного вызова.

Вот исходный код

В качестве альтернативы предоставленному глобальному флагу вы можете присвоить значение элементу DOM, что позволит нескольким элементам на странице иметь одинаковое поведение:

$("...").onclick(function(el) {
    var self = el;
    if (self.busy) return false;
    self.busy = true;
    $("...").animate(..., ..., ..., function() {
        self.busy= false;
    });
    return false;
});

Другие вопросы по теме