模拟鼠标点击 HTML5 canvas 元素上的 (x, y)
Simulating a mouse click at (x, y) on an HTML5 canvas element
我一直在尝试以编程方式模拟 canvas 元素上任意坐标处的鼠标单击。由于技术限制,我需要避免 jQuery 这会使这更容易。
使用this答案,我可以获得手动点击的坐标。
使用 this 答案,我能够以编程方式模拟鼠标点击。但不幸的是,我需要取消-jQuery-化它,我认为这是我 运行 遇到问题的地方。
如果我尝试做类似的事情:
document.querySelector("canvas").dispatchEvent(new Event("mousedown", {pageX: 1, pageY: 1}));
或
document.querySelector("canvas").dispatchEvent(new MouseEvent("mousedown", {pageX: 1, pageY: 1}));
或上述组合使用 'click' 而不是 'mousedown'
我仍然遇到我不理解的奇怪 'undefined' 错误(除此之外我可以看到它们指的是 'mousedown')并且从未成功模拟点击。
一些工作(和不工作)的例子:
您的 jQuery 方法的问题在于您将它与普通的 JavaScript 事件侦听器混合在一起。这不适用于 jQuery.
如果你想触发一个事件并使用 jQuery 监听它,你必须使用它的 .trigger()
和 .mousedown()
方法。
这是一个例子:
function getMousePosition(canvas, event) {
let rect = canvas.getBoundingClientRect();
let x = event.clientX - rect.left;
let y = event.clientY - rect.top;
document.getElementById('output').innerText = x + ", " + y;
}
canvasElem = document.querySelector("canvas");
$('#canvas_element').mousedown(function(e) {
getMousePosition(canvasElem, e);
});
var e = jQuery.Event("mousedown", {
clientX: 50,
clientY: 50
});
$('#canvas_element').trigger(e);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<canvas id="canvas_element"></canvas>
<div id="output"></div>
当然,以上所有都可以只使用 JavaScript 来完成。
function getMousePosition(canvas, event) {
let rect = canvas.getBoundingClientRect();
let x = event.clientX - rect.left;
let y = event.clientY - rect.top;
document.getElementById('output').innerText = x + ", " + y;
}
canvasElem = document.querySelector("canvas");
canvasElem.addEventListener("mousedown", function(e) {
getMousePosition(canvasElem, e);
});
canvasElem.dispatchEvent(new MouseEvent("mousedown", {
clientX: 50,
clientY: 50
}));
<canvas id="canvas_element"></canvas>
<div id="output"></div>
我一直在尝试以编程方式模拟 canvas 元素上任意坐标处的鼠标单击。由于技术限制,我需要避免 jQuery 这会使这更容易。
使用this答案,我可以获得手动点击的坐标。
使用 this 答案,我能够以编程方式模拟鼠标点击。但不幸的是,我需要取消-jQuery-化它,我认为这是我 运行 遇到问题的地方。
如果我尝试做类似的事情:
document.querySelector("canvas").dispatchEvent(new Event("mousedown", {pageX: 1, pageY: 1}));
或
document.querySelector("canvas").dispatchEvent(new MouseEvent("mousedown", {pageX: 1, pageY: 1}));
或上述组合使用 'click' 而不是 'mousedown'
我仍然遇到我不理解的奇怪 'undefined' 错误(除此之外我可以看到它们指的是 'mousedown')并且从未成功模拟点击。
一些工作(和不工作)的例子:
您的 jQuery 方法的问题在于您将它与普通的 JavaScript 事件侦听器混合在一起。这不适用于 jQuery.
如果你想触发一个事件并使用 jQuery 监听它,你必须使用它的 .trigger()
和 .mousedown()
方法。
这是一个例子:
function getMousePosition(canvas, event) {
let rect = canvas.getBoundingClientRect();
let x = event.clientX - rect.left;
let y = event.clientY - rect.top;
document.getElementById('output').innerText = x + ", " + y;
}
canvasElem = document.querySelector("canvas");
$('#canvas_element').mousedown(function(e) {
getMousePosition(canvasElem, e);
});
var e = jQuery.Event("mousedown", {
clientX: 50,
clientY: 50
});
$('#canvas_element').trigger(e);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<canvas id="canvas_element"></canvas>
<div id="output"></div>
当然,以上所有都可以只使用 JavaScript 来完成。
function getMousePosition(canvas, event) {
let rect = canvas.getBoundingClientRect();
let x = event.clientX - rect.left;
let y = event.clientY - rect.top;
document.getElementById('output').innerText = x + ", " + y;
}
canvasElem = document.querySelector("canvas");
canvasElem.addEventListener("mousedown", function(e) {
getMousePosition(canvasElem, e);
});
canvasElem.dispatchEvent(new MouseEvent("mousedown", {
clientX: 50,
clientY: 50
}));
<canvas id="canvas_element"></canvas>
<div id="output"></div>