He creado un "deslizador 2d" en jQuery en el que 2 parámetros se manipulan simultáneamente arrastrando un "mango" dentro de un rectángulo de selección.Cómo desencadenar un comportamiento que pueden arrastrarse mediante programación
he implementado este anidando una "manija" div dentro de un div padre, y usando el plugin jQuery UI para facilitar el comportamiento de arrastre. El HTML se parece a:
<div class="Slider2d" id="grid_spacing_both">
<div class="Slider2dHandle" id="grid_spacing_both_handle"></div>
</div>
el jQuery es así:
$(".Slider2dHandle").draggable({
containment: "parent",
scroll: false,
drag: function(event, ui) {
// calculates position and updates value input boxes
}
});
También he creado un código que vuelve a colocar el mango a la ubicación de los clics dentro del div padre:
$(".Slider2d").mousedown(function(event){
// get location of click and reposition handle to click location
});
lo que me gustaría hacer es modificar el método anterior de modo que el usuario puede hacer clic en alguna parte en el div padre, han colocado de nuevo el mango a la ubicación clic, y luego comience a arrastrar el mango sin lettin g el botón del mouse hacia arriba. Básicamente, necesito encontrar una manera de activar programáticamente la funcionalidad de arrastre.
He encontrado algunas sugerencias here y here, y trataron de poner en práctica sus recomendaciones al cambiar el método anterior, así:
$(".Slider2d").mousedown(function(event){
// get location of click and reposition handle to click location
handle = $(".Slider2d").children(".Slider2dHandle");
handle.trigger(event);
});
Esto funciona en el sentido más técnico, pero su super lento y me da una un montón de mensajes de error de Safari diciéndome "RangeError: se excedió el tamaño máximo de la pila de llamadas". Lo que estoy pensando que está sucediendo es que cuando disparo el evento en el mango, burbujea hasta el padre, que luego llama al gatillo otra vez y así sucesivamente. Intenté detener el burbujeo lanzando un event.stopPropagation en mi código antes y después de la llamada .trigger(), pero fue en vano.
lo tanto, si alguien tiene alguna sugerencia sobre cómo conseguir este trabajo que realmente lo apreciaría. Tengo un plan de respaldo here, pero esto me parece innecesariamente complicado.
Gracias!
Hay una pregunta relacionada. Espero que te ayude (http://stackoverflow.com/questions/5239649/can-click-on-jquery-draggable-parent-start-drag) –
@Fran De hecho, me refiero a ese en la pregunta anterior - es donde Obtuve la solución propuesta pero no funciona para mí. En cualquier caso, gracias por la sugerencia. – jkjenner