jQuery文本选择事件

Ski*_*ick 6 jquery events

我有以下事件处理代码:

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

.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();
  });
}
Run Code Online (Sandbox Code Playgroud)

小智 2

单击和选择文本的单击有什么区别?

我想说它可能与鼠标的向下单击和向上单击之间经过的时间有关。或者,也许更重要的是,可以通过按下鼠标时和鼠标弹起事件时鼠标屏幕位置的差异来诊断。

当 mouseDown 事件被触发时,记录 event.pageX 和 event.pageY 值。当 mouseUp 事件被触发时,将存储的 x,y 坐标与当前坐标进行比较。如果它们不同,则为文本选择...不执行任何操作。如果它们相同,请交换您的页面。

不幸的是,不知道如何在 JScript 中实现它;)