键盘事件一般发生在document的环境下!!!

keydown

:::info 键盘按键按下的事件 :::

  1. document.onkeydown = function () {
  2. console.log("keydown");
  3. };

该事件在按键一直按着的时候会连续触发。

keyup

:::info 键盘按键按下抬起的事件 :::

  1. document.onkeyup = function () {
  2. console.log("keyup");
  3. };

keypress

:::info 键盘按键按下的事件 :::

  1. document.onkeypress = function () {
  2. console.log("keypress");
  3. }

keydownkeypress都表示按键按下事件,但是他们之前存在区别。
1、当keydownkeypress事件都存在的时候,keydown会比keypress先触发。

  1. document.onkeypress = function (event) {
  2. console.log("onkeypress")
  3. };
  4. document.onkeydown = function (event) {
  5. console.log("onkeydown")
  6. };
  7. // 例如按下字母 Q 键,结果如下:
  8. // onkeydown
  9. // onkeypress

2、keydown事件没有charCode属性,keypress事件有charCode属性

  1. document.onkeydown = function (event) {
  2. var event = event || window.event;
  3. console.log(event.charCode);
  4. };
  5. document.onkeypress = function (event) {
  6. var event = event || window.event;
  7. console.log(event.charCode);
  8. };
  9. // 例如按下字母 Q 键,结果如下:
  10. // 0 113
  11. // 例如按下字母 A 键,结果如下:
  12. // 0 97
  13. // 例如按下字母 Z 键,结果如下:
  14. // 0 122

charCode表示ASCLL表里面的字符,当按下的按键在ASCLL中不存在就会不触发keypress事件。

String.fromCharCode(Number); 该方法接收一个数字表示在ASCLL中的位置,返回该位置的字符串。

  1. document.onkeypress = function (event) {
  2. var event = event || window.event;
  3. console.log(String.fromCharCode(event.charCode))
  4. };
  5. // 例如按下字母 Q 键,结果如下:
  6. // q
  7. // 例如按下 Shift+Q 键,结果如下:
  8. // Q
  9. // 例如按下 Shift 键,不会触发 keypress 事件!!!

3、keydownkeypress都有keyCode属性,而keypress中的keyCodecharCode是一样的都表示字符在ASCLL表中字符的位置!!!

  1. document.onkeypress = function (event) {
  2. var event = event || window.event;
  3. console.log(event.keyCode);
  4. };
  5. document.onkeydown = function (event) {
  6. var event = event || window.event;
  7. console.log(event.keyCode);
  8. };
  9. // 例如按下字母 Q 键,结果如下:
  10. // 81 113
  11. // 例如按下字母 A 键,结果如下:
  12. // 65 97
  13. // 例如按下字母 Z 键,结果如下:
  14. // 90 122
  15. // 例如按下 Shift 键,结果如下:
  16. // 16
  17. // 因为按下非 ASCLL 表里的字符不会触发 keypress 事件

keyCode

keydown事件中keyCode表示按键的键码,常见的键码如下:
1.png2.png3.png

案例用上下左右按键控制div进行移动:

  1. var oDiv = document.getElementsByClassName("box")[0];
  2. document.onkeydown = function (event) {
  3. var event = event || window.event,
  4. code = event.keyCode,
  5. bLeft = parseInt(window.getComputedStyle(oDiv, null).left),
  6. bTop = parseInt(window.getComputedStyle(oDiv, null).top);
  7. switch (code) {
  8. case 37:
  9. oDiv.style.left = bLeft - 5 + "px";
  10. break;
  11. case 39:
  12. oDiv.style.left = bLeft + 5 + "px";
  13. break;
  14. case 38:
  15. oDiv.style.top = bTop - 5 + "px";
  16. break;
  17. case 40:
  18. oDiv.style.top = bTop + 5 + "px";
  19. break;
  20. }
  21. };