【发布时间】:2023-06-23 16:51:01
【问题描述】:
是否有任何由鼠标连续单击产生的事件,即不释放鼠标按钮 1?如果没有,请告诉我。
【问题讨论】:
-
我认为这与 Java 没有任何关系,因此我删除了该标签。如果我错了就替换它。
标签: javascript html dom-events
是否有任何由鼠标连续单击产生的事件,即不释放鼠标按钮 1?如果没有,请告诉我。
【问题讨论】:
标签: javascript html dom-events
按下鼠标按钮时会触发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 中看到它正在运行。
【讨论】:
mousedown 位于目标元素上,但随后将鼠标从元素上移开而mouseup 移到其他地方时,这并没有考虑到这一点。在这种情况下,performWhileMouseDown 将无限期地继续触发。为了解决这个问题,您可以改为绑定到document 的mouseup 事件:jsfiddle.net/An2as
mouseout 事件设置为clearInterval。然后mouseup 和mouseover 都停止重复。以防万一您想要另一个元素的 mouseup 事件。
Longclick 是 jQuery 1.4.x 的按住鼠标按钮“长按”特殊事件。
当鼠标按钮保持按下(可配置的)秒数时触发该事件,而指针是静止的。
【讨论】:
是的,您可以使用 onmousemove= movefunction(event) 来做到这一点:
我解决这个问题的方法如下:
首先,创建一个onmousedown() 事件,在触发时将全局变量设置为1。
其次,创建一个onmouseup() 事件,在触发时将该全局变量设置为0。
然后,使用onmousemove() 事件在我希望发生鼠标按下行为的 div 中触发,但前提是我们之前设置的全局变量设置为1。
onmousemove()的使用示例:http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmousemove
完成。
【讨论】:
没有这样的事件。
您可能会实现一个函数来评估(第一次)鼠标点击和下一次鼠标释放之间经过的时间。
给定一个预定义的范围,您可以确定在您的逻辑中认为该按钮有效之前应该单击多长时间。
【讨论】:
根据spec,
点击被定义为鼠标按下并且 将鼠标悬停在同一屏幕位置上。 这些事件的顺序是: mousedown, mouseup, click
所以不,不存在“连续点击”,因为点击是由一系列动作产生的离散事件。
您可能想要做的是接收 mousedown,设置一个计时器,如果在一段时间内没有 mouseup 或 mousemove 发生,则调用一些行为。
【讨论】:
我一直在使用一个函数来确定是否正在拖动对象(如果由于某种原因您不能使用常规的 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');
}
}
}
}
【讨论】:
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();
}
}
}
}
【讨论】: