我有以下事件处理代码:
$('#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 中实现它;)