问题描述
这里是 JavaScript 的新手,我在浏览时使用游戏手柄(使用游戏手柄 API 和 TamperMonkey),我在模拟点击屏幕上的某个 (x,y) 坐标时遇到了麻烦。它报告“无法读取 null 的属性‘dispatchEvent’”,即使当我在单击函数中控制台记录我的元素时,它也会返回 null。任何人都可以帮助澄清可能存在错误的地方吗?
(function() {
'use strict';
const rAF = window.mozRequestAnimationFrame || window.requestAnimationFrame;
window.addEventListener("gamepadconnected",(event) => {
console.log("A gamepad connected:");
console.log(event.gamepad);
});
window.addEventListener("gamepaddisconnected",(event) => {
console.log("A gamepad disconnected:");
console.log(event.gamepad);
});
window.addEventListener('gamepadconnected',function(e) {
updateLoop();
})
function updateLoop() {
if(navigator.getGamepads) {
var gp = navigator.getGamepads()[0];
}
const xBoxButtonB = gp.buttons[1];
const xBoxButtonA = gp.buttons[0];
if (xBoxButtonA.pressed) {
console.log('a pressed');
click(1200,500);
}
if (xBoxButtonB.pressed) {
console.log('b pressed')
click(700,500);
}
setTimeout(function () {
rAF(updateLoop);
},150);
}
function click(x,y){
var ev = new MouseEvent('click',{
'view': window,'bubbles': true,'cancelable': true,'screenX': x,'screenY': y
});
var el = document.elementFromPoint(x,y);
console.log(el); //print element to console
el.dispatchEvent(ev);
}
})();
解决方法
e1
是 null
,这意味着传递给 elementFromPoint()
的坐标处没有元素。请注意,坐标相对于当前 viewport 的左上角。
尝试使用 click(0,0)
,它应该可以工作,因为 0,0 保证在视口内。