У меня есть следующий код обработки событий:
$('#main').delegate('.slide', 'click', function () {
slideshow.next();
});
$('#main').delegate('a', 'click', function (e) {
e.stopPropagation();
});
.slide
- это большой div с содержимым.slideshow.next()
вызывается при нажатии .slide
, кроме случаев, когда нажата ссылка, в этом случае stopPropagation()
, и .slide
никогда не получает событие нажатия.
Я хотел бы сделать это возможнымвыделить текст на слайде.В настоящий момент, если я щелкаю и перетаскиваю, когда я отпускаю мышь, выбор работает, но .slide
регистрирует щелчок и запускает функцию slideshow.next()
.Есть ли событие, которое я могу перехватить?
Страница доступна здесь .
Редактировать: Интересно, если выбор охватывает большечем один элемент HTML, click
не запускается, но если выделение находится внутри элемента, оно запускается.
Edit2: Хорошо, вот мое решение:
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();
});
}