วิธีแก้ปัญหาของ galambalazs ยอดเยี่ยมมาก! มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันทั้งใน Chrome และ Firefox และอาจขยายเพื่อป้องกันเหตุการณ์เริ่มต้นจากหน้าต่างเบราว์เซอร์ สมมติว่าคุณกำลังทำแอพบนผืนผ้าใบ คุณสามารถทำได้:
var events = {
preventDefault: function(e) {
e = e || window.event;
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
},
//spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36,
//left: 37, up: 38, right: 39, down: 40
keys: [32, 33, 34, 35, 36, 37, 38, 39, 40],
keydown: function(e) {
for (var i = events.keys.length; i--;) {
if (e.keyCode === events.keys[i]) {
events.preventDefault(e);
return;
}
}
},
wheel: function(e) {
events.preventDefault(e);
},
disable: function() {
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', events.wheel, false);
}
window.onmousewheel = document.onmousewheel = events.wheel;
document.onkeydown = helpers.events.keydown;
},
enable: function() {
if (window.removeEventListener) {
window.removeEventListener('DOMMouseScroll', events.wheel, false);
}
window.onmousewheel = document.onmousewheel = document.onkeydown = null;
}
}
และในแอปของคุณสมมติว่าคุณกำลังประมวลผลกิจกรรมของคุณเองเช่นเมาส์แป้นพิมพ์กิจกรรมการแตะและอื่น ๆ ... คุณสามารถปิดการใช้งานเหตุการณ์เริ่มต้นเมื่อเมาส์เข้าไปในผืนผ้าใบและเปิดใช้งานอีกครั้งเมื่อเมาส์ ออกไป:
function setMouseEvents(canvas) {
var useCapture = false;
//Mouse enter event
canvas.addEventListener('mouseenter', function(event) {
events.disable();
}, useCapture);
//Mouse leave event
canvas.addEventListener('mouseleave', function(event) {
events.enable();
}, useCapture);
}
คุณสามารถปิดการใช้งานเมนูคลิกขวาด้วยแฮ็คนี้:
function disableRightClickMenu(canvas) {
var my_gradient = canvas.context.createLinearGradient(0, 0, 0, 225);
my_gradient.addColorStop(0, "white");
my_gradient.addColorStop(1, "white");
canvas.context.fillStyle = my_gradient;
canvas.context.fillRect(0, 0, canvas.width, canvas.height);
canvas.oncontextmenu = function() { return false; };
}