【问题标题】:Continuous mouse click event连续鼠标点击事件
【发布时间】:2023-06-23 16:51:01
【问题描述】:

是否有任何由鼠标连续单击产生的事件,即不释放鼠标按钮 1?如果没有,请告诉我。

【问题讨论】:

  • 我认为这与 Java 没有任何关系,因此我删除了该标签。如果我错了就替换它。

标签: javascript html dom-events


【解决方案1】:

按下鼠标按钮时会触发mousedown 事件。如果您正在寻找一个重复触发的事件,而按钮被按住,那么您很不走运,但是您可以使用mousedown 事件重复执行一个动作,并在触发mouseup 事件时停止。

例如,您可以使用setInterval 函数在鼠标按钮按下时重复调用一个函数,然后在释放鼠标按钮时使用clearInterval 停止。这是一个示例(使用 jQuery):

var interval;
$("#elementToClick").mousedown(function() {
    interval = setInterval(performWhileMouseDown, 100);
}).mouseup(function() {
    clearInterval(interval);  
});
function performWhileMouseDown() {
    $("#output").append("<p>Mouse down</p>");
}

您可以在 example fiddle 中看到它正在运行。

【讨论】:

  • 谢谢。实际上,我正在使用 wicket 并尝试获取一个 ajaxEvent,通过它我可以执行一些服务器端执行。
  • 请注意,当用户mousedown 位于目标元素上,但随后将鼠标从元素上移开而mouseup 移到其他地方时,这并没有考虑到这一点。在这种情况下,performWhileMouseDown 将无限期地继续触发。为了解决这个问题,您可以改为绑定到documentmouseup 事件:jsfiddle.net/An2as
  • @BillDami 您也可以将元素的mouseout 事件设置为clearInterval。然后mouseupmouseover 都停止重复。以防万一您想要另一个元素的 mouseup 事件。
【解决方案2】:

有一个JQuery plugin: LongClick

Longclick 是 jQuery 1.4.x 的按住鼠标按钮“长按”特殊事件。

当鼠标按钮保持按下(可配置的)秒数时触发该事件,而指针是静止的。

【讨论】:

    【解决方案3】:

    是的,您可以使用 onmousemove= movefunction(event) 来做到这一点:

    我解决这个问题的方法如下:

    首先,创建一个onmousedown() 事件,在触发时将全局变量设置为1

    其次,创建一个onmouseup() 事件,在触发时将该全局变量设置为0

    然后,使用onmousemove() 事件在我希望发生鼠标按下行为的 div 中触发,但前提是我们之前设置的全局变量设置为1

    onmousemove()的使用示例:http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmousemove

    完成。

    【讨论】:

      【解决方案4】:

      没有这样的事件。

      您可能会实现一个函数来评估(第一次)鼠标点击和下一次鼠标释放之间经过的时间。

      给定一个预定义的范围,您可以确定在您的逻辑中认为该按钮有效之前应该单击多长时间。

      【讨论】:

        【解决方案5】:

        根据spec

        点击被定义为鼠标按下并且 将鼠标悬停在同一屏幕位置上。 这些事件的顺序是: mousedown, mouseup, click

        所以不,不存在“连续点击”,因为点击是由一系列动作产生的离散事件。

        您可能想要做的是接收 mousedown,设置一个计时器,如果在一段时间内没有 mouseup 或 mousemove 发生,则调用一些行为。

        【讨论】:

          【解决方案6】:

          我一直在使用一个函数来确定是否正在拖动对象(如果由于某种原因您不能使用常规的 on drag 事件)。不能确定 $(':focus')[0] === undefined 是否适用于所有情况,但可以自定义。

          // this function will set up a mouse drag event and also check if something is being dragged
          function customOnDrag(selector) {
             var dragInProgress = false;
             let mouseDrag = false;
             let mouseDown = false;
             $(selector).on('mousedown', function(event) {
                 mouseDrag = false;
                 mouseDown = true;
                 interval = setInterval(checkIfDraggingAnObject, 20, event); // set to check every 20 ms
             }
             ).on('mousemove', function(event) {
                 if ( mouseDown ){
                     mouseDrag = true;
                 }
             }
             ).on('mouseup', function(event) { 
                 checkIfDraggingAnObject(event);
                 clearInterval(interval);
                 mouseDrag = false;
                 mouseDown = false;
               }
            ); 
            // function to check if an object is being dregged:
            function checkIfDraggingAnObject(event){
               if ( event.type === 'mousedown' ){
                  if ( $(':focus')[0] === undefined || mouseDrag === false ){
                     // not dragging an object
                     dragInProgress = false;   
                  }else{
                     // dragging an object
                     dragInProgress = true;
                     console.log('dragging: ');
                     console.log($(':focus'));  // the object being dragged
                  };
               }else if ( event.type === 'mouseup'  ) {
                  if ( dragInProgress ){
                     // dropped the object
                     console.log('dropped: ');
                     console.log($(':focus')); // the dropped object
                     dragInProgress = false;
                  }else if ( mouseDrag ) {
                     // dragged the mouse, but no object
                     console.log('did not drag an object');
                  }else{
                     // did not drag the mouse
                     console.log('did not drag the mouse');
                  }
          
               }
            }
          }
          

          【讨论】:

            【解决方案7】:
            import java.awt.Robot;
            import java.awt.event.*;
            public class App {
                private static final int key = InputEvent.BUTTON1_DOWN_MASK;
                public static void main(String[] args) {
                    System.out.println("Hello, World!");
                    Robot robot;
                    while (1==1) {
                        try {
                            robot = new Robot();
                            robot.mousePress(key);
                            robot.mouseRelease(key);
                            // robot.mouseMove(x, y);// x,y are cordinates
                            // Simulate a mouse click
                            robot.mousePress(key);
                            robot.mouseRelease(key);
                            Thread.sleep(3000);
                            // Simulate a key board press
                            // robot.keyPress(KeyEvent.VK_A);
                            // robot.keyRelease(KeyEvent.VK_A);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            

            【讨论】:

            • 请在您的代码中添加一些 cmets,了解它的作用以及它如何回答问题。
            • 以上代码用于连续右键事件