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