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();
});
}
gracias, estaba pensando que esta podría ser la única solución. – Skilldrick
@Skilldrick Avíseme si intenta esto ~ buena suerte. –
He ido con esta solución - actualicé la pregunta con mi código de trabajo. Saludos :) – Skilldrick