Событие выделения текста jQuery - PullRequest
6 голосов
/ 27 января 2011

У меня есть следующий код обработки событий:

$('#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();
  });
}

Ответы [ 2 ]

2 голосов
/ 27 января 2011

В чем разница между одним щелчком мыши и щелчком, который выделяет текст?

Я бы сказал, что это может относиться ко времени, которое прошло между щелчком вниз и щелчком мыши вверх.В качестве альтернативы и, что более важно, это может быть диагностировано по разнице в положении экрана мыши во время нажатия кнопки «вниз» и во время события «вверх» мыши.

Когда срабатывает событие mouseDown, запишите событиеЗначения .pageX и event.pageY.Когда вызывается событие mouseUp, сравните сохраненные координаты x, y с текущим.Если они разные, это был текст, выберите ... ничего не делайте.Если они одинаковые, поменяйте местами свою страницу.

Не уверен, как реализовать это в JScript, к сожалению;)

0 голосов
/ 27 января 2011

используйте $('.slide').select, чтобы перехватить событие выбора и остановить распространение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...