JavaScript键盘鼠标事件处理

监听键盘鼠标事件 监听某个按键事件

当键盘上的某个键被按下时,会依次触发一次下面的事件:

onkeydown: 键盘按下这个动作(按下键盘)

onkeypress: 键盘被按住(一直按着键盘不动)

onkeyup: 键盘被弹起(松开键盘)

通过监听keydown事件既可以知道键盘被按下:

document.onkeydown = function(event) { // 键盘按下时触发 console.log('key down'); }; document.onkeypress = function(event) { // 键盘按住时触发 console.log('key press'); }; document.onkeyup = function (event) { // 键盘弹起时触发 console.log('key up'); }; // 控制台数据的顺序为:key down -> key press -> key up

注意到键盘按下的event参数,该参数为KeyboardEvent事件对象,其中包含按键相关的一些属性。其中:

type: 事件类型,如'keydown'或者'keyup'

key: 表示按下的键盘内容是什么即键值,按下字母'p'时,值为'p'

code: 表示键盘代码,按下字母'p'时,值为'KeyP'

keyCode(过时): 整数,表示键码,每个键都有唯一的键码,字母'p'的键码为80

altKey: 布尔值,表示此时的alt键是否也按下

ctrKey: 布尔值,表示此时的alt键是否也按下

shiftKey: 布尔值,表示此时的shift键是否也按下

metaKey: 布尔值,windows平台表示Window键是否同时按下,mac表示Command键是否同时按下

repeat: 布尔值,如果一个键一直被按着,则其值为true,表示重复

可以通过检查这些属性来判断用户按下的是什么键,以及是否ctrl和alt等键是否同时按下。

document.onkeydown = function(event) { // 键盘按下是触发 console.log('key down: ' + event.key); if (event.altKey) { console.log('alt is active'); } if (event.shiftKey) { console.log('shift is active'); } }; 监听鼠标事件

相应的也可以监听鼠标相关的事件,触发时的参数event为MouseEvent对象类型:

onclick: 鼠标点击事件

ondblclick: 鼠标双击事件

onmousedown: 鼠标上的按钮被按下了

onmouseup: 鼠标按下后松开时触发的事件

onmousemove: 鼠标移动时触发的事件

onmouseout: 鼠标离开监听该事件的元素或子元素时触发的事件

onmouseover: 鼠标移动到监听该事件的元素或子元素时触发的事件

onmousewheel: 鼠标滚轮事件,一般使用onscroll事件

MouseEvent对象中包含下面比较有用的属性:

type: 事件类型,如'mosemove'或者'mousedown'

button: 整形,触发鼠标事件时按下的按钮编号

buttons: 整形,触发鼠标事件时弹起来的按钮编号

clientX: 鼠标指针在DOM内容区的X坐标

clientY:鼠标指针在DOM内容区的Y坐标

offsetX: 鼠标指针相对父节点填充边缘的X坐标

offsetY: 鼠标指针相对父节点填充边缘的Y坐标

screenX: 鼠标指针在全局屏幕的X坐标

screenY: 鼠标指针在全局屏幕的Y坐标

pageX: 鼠标指针在整个DOM内容(包括分页)的X坐标

pageY: 鼠标指针在整个DOM内容(包括分页)的Y坐标

altKey: 布尔值,表示此时的alt键是否也按下

ctrKey: 布尔值,表示此时的alt键是否也按下

shiftKey: 布尔值,表示此时的shift键是否也按下

metaKey: 布尔值,windows平台表示Window键是否同时按下,mac表示Command键是否同时按下

通过鼠标事件的event属性,可以获取鼠标点击的位置,鼠标点击时是否按住ctrl等。

监听连续的按键事件

在很多游戏中,都要隐藏的秘笈,比如上上下下左左右右BABA这样的秘笈,那么怎么监听事件,能够知道用户是按下了这个秘笈呢?

实现的方法就是用一个数组来记录连续按键的状态,每次按键正确则匹配下一个,知道所有匹配成功。

// 上上下下左左右右BABA的键值 const secretKey = ['up', 'up', 'down', 'down', 'left', 'left', 'right', 'right', 'b', 'a', 'b', 'a']; // 秘笈的键码 const secretKeyCode = [38, 38, 40, 40, 37, 37, 39, 39, 66, 65, 66, 65]; // 当前按键匹配的状态 let secretKeyCodeStatus = new Array(secretKeyCode.length).fill(0); // 当前正确秘笈按键的索引 // let correctCodeIndex = 0; const CORRECT_STATUS = 1; // 表示正确匹配按键的状态 document.onkeydown = function(event) { // 查找第一个0的位置,即当前按键应该匹配的位置 let correctCodeIndex = secretKeyCodeStatus.lastIndexOf(CORRECT_STATUS); correctCodeIndex = correctCodeIndex === -1 ? 0 : correctCodeIndex + 1; // 如果所有的按键都正确,则返回 if (correctCodeIndex > secretKeyCode.length) { alert('success'); return true; } // 如果本次按键正确,则记录 if (event.keyCode === secretKeyCode[correctCodeIndex]) { console.log('keyCode: ' + event.keyCode + ' code: ' + event.code + ' --correct,index:' + correctCodeIndex); // 所有按键都正确则成功 if (correctCodeIndex + 1 === secretKeyCodeStatus.length) { alert('success'); // 重置状态 secretKeyCodeStatus = new Array(secretKeyCode.length).fill(0); return true; } else { // 否则记录当前按键成功 secretKeyCodeStatus[correctCodeIndex] = CORRECT_STATUS; } } else { console.log('keyCode: ' + event.keyCode + ' code: ' + event.code + ' --reset'); // 按键错误则重置 secretKeyCodeStatus = new Array(secretKeyCode.length).fill(0); } }; 模拟按键

上面我们说明了如何监听页面的按键和键盘事件,但是有的时候我们需要使用代码模拟按钮操作。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjsxd.html