2011-01-26 24 views
6

tengo el siguiente código de manejo de eventos:jQuery evento de selección de texto

$('#main').delegate('.slide', 'click', function() { 
    slideshow.next(); 
}); 
$('#main').delegate('a', 'click', function (e) { 
    e.stopPropagation(); 
}); 

.slide es un gran div con el contenido. Se llama a slideshow.next() cuando se hace clic en .slide, excepto cuando se hace clic en un enlace, en cuyo caso stopPropagation() y .slide nunca reciben el evento de clic.

Me gustaría que sea posible seleccionar texto en la diapositiva. Por el momento, si hago clic y arrastro, cuando suelte el mouse, la selección funciona pero .slide registra el clic y activa la función slideshow.next(). ¿Hay algún evento que pueda interceptar?

La página es available here.


Editar: Curiosamente, si la selección se extiende por más de un elemento HTML, click ¿no disparó, pero la selección está dentro de un elemento, se disparó.


Edit2: Ok, aquí está mi solución:

function setupHandlers() { 
    var prevX = 0; 
    var prevY = 0; 

    $('#main').delegate('.slide', 'click', function (e) { 
    var clickTolerance = 2; 
    var dx = Math.abs(e.pageX - prevX); 
    var dy = Math.abs(e.pageY - prevY); 
    //if mouse has moved less than two pixels in any direction this is a click 
    if (dx < clickTolerance && dy < clickTolerance) { 
     slideshow.next(); 
    } 
    }); 
    $('#main').delegate('.slide', 'mousedown', function (e) { 
    prevX = e.pageX; 
    prevY = e.pageY; 
    }); 
    $('#main').delegate('a', 'click', function (e) { 
    //Clicks on links shouldn't fire '.slide'.click() above 
    e.stopPropagation(); 
    }); 
} 

Respuesta

2

¿Cuál es la diferencia entre un solo clic y un clic que selecciona texto?

Yo diría que podría estar relacionado con el tiempo transcurrido entre el clic hacia abajo y el clic hacia arriba del mouse. Alternativamente, y quizás lo más importante, podría ser diagnosticado por la diferencia en la posición de la pantalla del mouse en el momento del clic hacia abajo y en el momento del evento del mouse arriba.

Cuando se dispara el evento mouseDown, registre los valores de event.pageX y event.pageY. Cuando se dispara el evento mouseUp, compare los coords x, y almacenados con la corriente. Si son diferentes, fue un texto seleccionado ... no hacer nada. Si son lo mismo, cambie su página.

No estoy seguro de cómo implementar esto en JScript desgracia;)

+0

gracias, estaba pensando que esta podría ser la única solución. – Skilldrick

+0

@Skilldrick Avíseme si intenta esto ~ buena suerte. –

+0

He ido con esta solución - actualicé la pregunta con mi código de trabajo. Saludos :) – Skilldrick

0

uso $('.slide').select para coger el evento de selección y detener la propagación.

+0

'.select' sólo funciona para los elementos de formulario :( – Skilldrick

+0

no quiero votar esto abajo pero es la respuesta equivocada - .select es de forma selección de texto, no para selección de texto general – Skilldrick

Cuestiones relacionadas