javascript - 检测区别于单击并拖动或双击并拖动的单击事件

标签 javascript

有什么方法可以区分单击事件,使其与用户实际结束拖动鼠标的时间区分开来吗?我有一些充满链接的文本,并希望用户可以轻松地单击并拖动文本以选择某些文本,但是链接使这变得困难,因为浏览器将其解释为他们试图拖动链接,而不是选择一些文本。所以我解决这个问题的方法是使用 <a onClick=...>而不是 <a href> ,因为浏览器允许我将鼠标拖到它上面,就像普通文本一样。

但是,这似乎只有在我单击并将鼠标拖到两个单独的 <a> 上时才有效。标签:如果选择完全在 <a> 内部标记事件仍然会触发,如果我尝试双击并拖动文本,它也会触发。

所以我想知道除了使用 onMouseDown 是否还有其他方法可以做到这一点和 onMouseUp并手动跟踪延迟以确定用户在做什么。

我知道有些浏览器提供了通过按住修改键来拖动链接的选项,但我很好奇是否有更简单的方法可以做到这一点,而无需用户了解该功能。

最佳答案

观点文章

虽然这可能是可行的,但请考虑可访问性以及它如何满足您的项目需求。使用 onclick 的导航不提供相同的可访问性优势,而且它需要浏览器可以免费完成的大量重新发明工作。

我知道移动设备通常允许长按访问文本选择/上下文菜单组合;在桌面上,它会因设备/浏览器而异。


实际答案

我能想到的唯一“仅检测点击”实现是使用三个处理程序,分别为 mousedownmouseupmousemove。前方未经测试的代码!

let clicked = false;
document.addEventListener('mousedown', e => { clicked = true; });
document.addEventListener('mousemove', e => { clicked = false; });
document.addEventListener('mouseup', e => { 
    if(clicked) {
        // The mouse was clicked without moving it around!
        // Do your "only clicked" logic in here.
    }

    // Reset this back to false for next time
    clicked = false; 
});

关于javascript - 检测区别于单击并拖动或双击并拖动的单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70764586/

相关文章:

javascript - Google Picker API DocsUploadView setIncludeFolders 不起作用

javascript - 适用于 Windows Phone 的 Cordova Visual Studio 2012 Express : Open External PDF URL

javascript - 立即自执行函数和 "this"

javascript - 使用 jQuery 触发延迟悬停事件

javascript - 通过单击属性下拉选择

javascript - "Leaf-justify"D3 树形图?

javascript - 如何从 javascript include 中使用 php 获取主页的 url?

javascript - 我如何从 jquery 中的多个 div 中选择特定的 div

javascript - 如何以 Angular 获取具有可观察居中文本的 Chart js?

javascript - 如何在 Sheetrock 中使用 LIKE 运算符