jQuery onClick ejecución

Tengo algo de javascript escrita con jQuery 1.2.5. Es contenida dentro de la función main() de un plugin que me escribió. El plugin es una galería horizontal scroll muy similar a jCarousel. Hace un montón de auto el cálculo de los anchos y determina la forma en que muchos de desplazamiento basado en eso y el tamaño de las imágenes, que es lo que todos los cálculos son que están pasando.

Lo que mi pregunta es, ¿cómo puedo evitar que esto de disparar antes de una ejecución anterior está terminado. Por ejemplo, si tengo un pequeño clic feliz y frenéticamente puré de abajo en .digi_next. Las cosas no van tan bien en la interfaz de usuario cuando eso sucede y me gustaría solucionarlo 🙂 pensé que la respuesta podría estar en queue, pero todos mis intentos de utilizar que no resultó nada que valiera la pena.

    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);
    });
  • nota: recomiendo jQuery v1.2.6 desde el lanzamiento para la 1.2.5 fue destrozada y 1.2.6 tiene importantes correcciones de errores
  • Voy a mirar en él, gracias. Yo estaba usando 1.2.5 porque es en nuestra solución y realmente no tienen el poder para cambiar, pero yo sé que no… >.>
InformationsquelleAutor Wes P | 2008-09-23

4 Kommentare

  1. 10

    Sólo tiene que utilizar un global de ocupados de la bandera. Cuando ingresa tus haga clic en controlador, compruebe que no, y sólo procederá si es falso. Inmediatamente se establece en true y, a continuación, volver a false cuando termina la animación. JavaScript es un único subproceso, así que no hay una condición de carrera que preocuparse.

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

    Como una alternativa a la afformentioned indicador global, usted puede asignar el valor al elemento de DOM, de esa manera permitir que varios elementos de la página para tener el mismo comportamiento:

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

    Desde JavaScript funciones de las llamadas son asyncronus, se puede pasar como parámetro en una función de devolución de llamada cuando la llamada anterior extremos (el mismo de los errores).

    Puede pasar a la función que escribiste en este post, como el de devolución de llamada para la función que el fuego antes.

    Espero que esto ayude.

    Que respecta a

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea