我希望有一个更优雅的解决方案来解决这个问题。基本上,我有一个HTML / Javascript应用程序将在触摸屏自助服务终端上运行。我试图阻止默认点击行为,如果有人通过拖动他们的手指滚动按钮列表。起初我试图在检测到滑动事件时阻止默认。但后来我发现它并不是一个真正的滑动事件,而是一个漫长的mousedown。所以我写了下面的代码:
var downClick;
var startTime;
$(".TPGSW-wrapper").on('mousedown', function () {
downClick = new Date();
startTime = downClick.getTime();
});
$(".TPGSW-wrapper").on('mouseup', function () {
var upClick = new Date();
var endTime = upClick.getTime();
if (endTime - startTime < 250) {
return false;
} else if (endTime - startTime >= 300) {
// This is the action that I can't seem to get to work.
// I would like it to stop the click event. I also tried mouseup
this.on('click', function () { preventDefault; });
}
});
这正确地测量了mousedown的时间,但是我似乎无法停止点击事件的触发。有什么想法或建议吗?我正在使用jquery,这仅适用于webkit浏览器。提前谢谢!
答案 0 :(得分:2)
好的,经过一些测试,我能够使用以下代码:
var longpress = false;
$(".TPGSW-wrapper").on('click', function (e) {
(longpress) ? e.preventDefault() : alert("clicked");
});
var startTime, endTime;
$(".TPGSW-wrapper").on('mousedown', function () {
startTime = new Date().getTime();
});
$(".TPGSW-wrapper").on('mouseup', function () {
endTime = new Date().getTime();
if (endTime - startTime < 250) {
longpress = false;
console.log('< 250');
} else if (endTime - startTime >= 300) {
longpress = true;
console.log('>= 300');
}
});
如果鼠标按住的时间少于250毫秒,则会触发click事件;如果超过300毫秒,则会调用e.preventDefault
并停止点击事件。
答案 1 :(得分:1)
else if (endTime - startTime >= 300) {
$(this).one('click', function (e) {
e.preventDefault();
e.stopImmediatePropagation();
});
}
注意如何使用“one”而不是“on”。这样它只会触发一次,而不是每次都触发。
根据JCOC611的评论,你可以删除你的mouseup事件并在现场使用:
$(".TPGSW-wrapper").on('click', function (e) {
var upClick = new Date();
var endTime = upClick.getTime();
if (endTime - startTime >= 300) {
e.preventDefault();
e.stopImmediatePropagation();
}
});