2012-05-25 12 views
8

Quiero poder comprobar si un evento está ocurriendo o no en el momento en que se llama a una función. Tengo una función que se llama cuando mi barra de desplazamiento personalizada se arrastra utilizando .draggable() arriba y abajo y también tengo una función que se llama cuando mi contenedor se desplaza. El problema es que ambos se ejecutan al mismo tiempo, lo que hace que actúe con errores.Cómo comprobar si el elemento se está arrastrando actualmente

Así que mi pregunta es ¿cómo hago una declaración "si" para verificar si la barra de desplazamiento está siendo arrastrada o no para que pueda evitar que se ejecute el resto del código de la función?

No estoy preguntando si un elemento tiene un evento "vinculado" o no, sino más bien si ese evento se está desencadenando en un momento determinado.

¿Puedo hacer esto? ¿O necesito tomar otro enfoque?

Esto es lo que se ve mi código como:

$('.container').scroll(function(){ 
    //get the heights of the container and it's contents and the difference 
    //get the height of the scroll bar and it's container and the difference 
    //declare the top property of scroll bar from this info 
}); 
function scrolly() { 
    //get the heights of the elements described above 
    //declare the scrollTop of the container 
} 
$('.bar').draggable({ 
    axis: 'y', 
    containment: 'parent',  
    drag: function() { 
     scrolly(); 
    } 
}); 
+0

puede obtener ese dentro de ti la función 'drag', porque' drag' se dispara al arrastrar continúa – thecodeparadox

+0

+1 - Gran pregunta – jmort253

+0

No está claro cuál es tu otra función lo está haciendo, pero si ambos están involucrados en el desplazamiento, ¿podrían fusionarlos? – jmort253

Respuesta

13

actualización

Puede utilizar esta condición para averiguar si la barra está siendo arrastrado:

if ($('.bar').is('.ui-draggable-dragging')) { 
    return; // bar is being dragged 
} 
+0

Devuelve 'true' incluso en la devolución de llamada' stop' para arrastrar, porque jquery ui llama 'stop' antes de llamar a' _clear', que elimina esta clase. ¿Alguna otra solución alternativa para el manejador 'stop'? –

+0

@coding_idiot mis primeros instintos dirían que dentro del manejador de tope probablemente debas asumir que ya no está siendo arrastrado ;-) –

+0

Disculpa por la confusión, 'drag' y' stop' están llamando a la misma función, en la cual estoy haciendo diferente acciones según si el arrastre continúa o no. A partir de ahora, agregué una clase en 'start' y la eliminé en' stop' para encargarme :) –

Cuestiones relacionadas