在 Javascript 中使双击相当于两次简单的点击

Making double clicks act as two simple clicks in Javascript

我的网页中有一些可点击的元素。当你点击它们时,比方说,它们会改变它们的背景颜色。每次你点击它们都会得到不同的颜色。它们最初是灰色的,然后是蓝色的,然后是黄色的,然后是橙色的,然后又变回灰色,依此类推...

现在的问题是所有这些都是通过单击实现的,但我希望我的双击可以作为两次单击而不是触发双击事件(select 这个词等...)

假设我们有以下句子

<p>This is my <span id="elem_1" className="color_1"> element </span></p>

这是我的 js 代码:

var totalNbOfClicks = 0
var elem document.getElementbyId("elem_1")
elem.onclick = function () {
   totalNbOfClicks +=1
   totalNbOfClicks = totalNbOfClicks%4
   elem.className = "elem_"+totalNbOfClicks
}
elem.ondblclick = function(evt) {
   ClearSelection();
   evt.preventDefault()
}

function ClearSelection() {
    if (window.getSelection)
        window.getSelection().removeAllRanges();
    else if (document.selection)
        document.selection.empty();
}

现在我在双击时使用 this answer 中详述的 ClearSelection 功能。

我想以某种方式找到一种在双击时触发 2 个单击事件的方法,但我还没有从已经提出的问题中找到任何可以帮助 SO 的方法。


编辑:感谢@VLAZ 的评论,我发现问题可能源于这个额外的东西:

当文本被 select 编辑时,我还想做一些额外的事情,所以我添加了一个

elem.onMouseUp(e){

   //Do some stuff here with the selection e.g.,
   var sel = window.getSelection()
   selectedText = sel.toString();
   var range = window.getSelection().getRangeAt(0);
   console.log(selectedText)
   console.dir(range)
}

现在,如果我有 e.preventDefault()elem.onMouseUp(e),我会得到预期的行为,但这不是我的选择。

var totalNbOfClicks = 0
var elem = document.getElementById("elem_1")
elem.onclick = function () {
   totalNbOfClicks +=1;
   console.log("total", totalNbOfClicks);
   totalNbOfClicks = totalNbOfClicks%4;
   elem.className = "elem_"+totalNbOfClicks;
}
elem.ondblclick = function () {
  for(var i=0; i<=2; i++){ 
  totalNbOfClicks +=1;
   console.log("total", totalNbOfClicks);
   totalNbOfClicks = totalNbOfClicks%4;
   elem.className = "elem_"+totalNbOfClicks;
}}


function ClearSelection() {
    if (window.getSelection)
        window.getSelection().removeAllRanges();
    else if (document.selection)
        document.selection.empty();
}
body{
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<p>This is my <span id="elem_1" className="color_1"> element </span></p>
</body>
</html>

当你双击它时会出现这个结果... 它在双击时返回两个单个事件,CSS 禁用文本选择。 希望它清楚。