Skip to content

Commit 85eba7c

Browse files
committed
docs(events): add KeyboardEvent
1 parent 4888d00 commit 85eba7c

File tree

4 files changed

+186
-1
lines changed

4 files changed

+186
-1
lines changed

chapters.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
- events/event.md: Event 对象
6161
- events/mouseevent.md: MouseEvent 接口,WheelEvent 接口
6262
- events/touchevent.md: Touch 接口,TouchList 接口,TouchEvent 接口
63+
- events/keyboardevent.md: KeyboardEvent 接口
6364
- events/globaleventhandlers.md: GlobalEventHandlers 接口
6465
- bom/: 浏览器模型
6566
- bom/cookie.md: Cookie

docs/events/event-type.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# 事件种类
2+
3+
## 鼠标事件
4+
5+
- click
6+
- dblclick
7+
- mouseup
8+
- mousedown
9+
10+
## 触摸事件
11+
12+
触摸引发的事件,有以下几种。可以通过`TouchEvent.type`属性,查看到底发生的是哪一种事件。
13+
14+
- `touchstart`:用户开始触摸时触发,它的`target`属性返回发生触摸的元素节点。
15+
- `touchend`:用户不再接触触摸屏时(或者移出屏幕边缘时)触发,它的`target`属性与`touchstart`事件一致的,就是开始触摸时所在的元素节点。它的`changedTouches`属性返回一个`TouchList`实例,包含所有不再触摸的触摸点(即`Touch`实例对象)。
16+
- `touchmove`:用户移动触摸点时触发,它的`target`属性与`touchstart`事件一致。如果触摸的半径、角度、力度发生变化,也会触发该事件。
17+
- `touchcancel`:触摸点取消时触发,比如在触摸区域跳出一个情态窗口(modal window)、触摸点离开了文档区域(进入浏览器菜单栏)、用户的触摸点太多,超过了支持的上限(自动取消早先的触摸点)。
18+
19+
下面是一个例子。
20+
21+
```javascript
22+
var el = document.getElementsByTagName('canvas')[0];
23+
el.addEventListener('touchstart', handleStart, false);
24+
el.addEventListener('touchmove', handleMove, false);
25+
26+
function handleStart(evt) {
27+
evt.preventDefault();
28+
var touches = evt.changedTouches;
29+
for (var i = 0; i < touches.length; i++) {
30+
console.log(touches[i].pageX, touches[i].pageY);
31+
}
32+
}
33+
34+
function handleMove(evt) {
35+
evt.preventDefault();
36+
var touches = evt.changedTouches;
37+
for (var i = 0; i < touches.length; i++) {
38+
var touch = touches[i];
39+
console.log(touch.pageX, touch.pageY);
40+
}
41+
}
42+
```
43+
44+
## 键盘事件
45+
46+
- keydown
47+
- keypress
48+
- keyup
49+
50+
## 焦点事件
51+
52+
- focus
53+
- blur
54+
- focusin
55+
- focusout
56+

docs/events/globaleventhandlers.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,30 @@ element.ondragEnd = function (ev) {
186186
}
187187
```
188188

189-
## 触摸相关事件
189+
## 触摸事件的相关属性
190+
191+
触摸事件的相关属性有四个。
190192

191193
- GlobalEventHandlers.ontouchcancel
192194
- GlobalEventHandlers.ontouchend
193195
- GlobalEventHandlers.ontouchmove
194196
- GlobalEventHandlers.ontouchstart
195197

198+
下面是一个例子。
199+
200+
```javascript
201+
/* HTML 代码如下
202+
<div id="target1"> 触摸这里 </div>
203+
*/
204+
205+
function startTouch(event) {
206+
// ...
207+
}
208+
209+
var el=document.getElementById('target1');
210+
el.ontouchstart = startTouch;
211+
```
212+
196213
## 特定元素的属性
197214

198215
### GlobalEventHandlers.oncancel,GlobalEventHandlers.onclose

docs/events/keyboardevent.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# KeyboardEvent 接口
2+
3+
## KeyboardEvent 概述
4+
5+
`KeyboardEvent`接口用来描述用户与键盘的互动。这个接口继承了`Event`接口,并且定义了自己的实例属性和实例方法。
6+
7+
浏览器原生提供`KeyboardEvent`构造函数,用来新建键盘事件的实例。
8+
9+
```javascript
10+
new KeyboardEvent(type, options)
11+
```
12+
13+
`KeyboardEvent`构造函数接受两个参数。第一个参数是字符串,表示事件类型;第二个参数是一个事件配置对象,该参数可选。除了`Event`接口提供的属性,还可以配置以下字段,它们都是可选。
14+
15+
- `key`:字符串,当前按下的键,默认为空字符串。
16+
- `code`:字符串,表示当前按下的键的字符串形式,默认为空字符串。
17+
- `location`:整数,当前按下的键的位置,默认为`0`
18+
- `ctrlKey`:布尔值,是否按下 Ctrl 键,默认为`false`
19+
- `shiftKey`:布尔值,是否按下 Shift 键,默认为`false`
20+
- `altKey`:布尔值,是否按下 Alt 键,默认为`false`
21+
- `metaKey`:布尔值,是否按下 Meta 键,默认为`false`
22+
- `repeat`:布尔值,是否重复按键,默认为`false`
23+
24+
## KeyboardEvent 的实例属性
25+
26+
### KeyboardEvent.altKey,KeyboardEvent.metaKey.ctrlKey,KeyboardEvent.metaKey,KeyboardEvent.shiftKey
27+
28+
以下属性都是只读属性,返回一个布尔值,表示是否按下对应的键。
29+
30+
- `KeyboardEvent.altKey`:是否按下 Alt 键
31+
- `KeyboardEvent.ctrlKey`:是否按下 Ctrl 键
32+
- `KeyboardEvent.metaKey`:是否按下 meta 键(Mac 系统是一个四瓣的小花,Windows 系统是 windows 键)
33+
- `KeyboardEvent.shiftKey`:是否按下 Shift 键
34+
35+
下面是一个示例。
36+
37+
```javascript
38+
function showChar(e){
39+
console.log("ALT: " + e.altKey);
40+
console.log("CTRL: " + e.ctrlKey);
41+
console.log("Meta: " + e.metaKey);
42+
console.log("Meta: " + e.shiftKey);
43+
}
44+
45+
document.body.addEventListener('click', showChar, false);
46+
```
47+
48+
### KeyboardEvent.code
49+
50+
`KeyboardEvent.code`属性返回一个字符串,表示当前按下的键的字符串形式。该属性只读。
51+
52+
下面是一些常用键的字符串形式,其他键请查[文档](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code#Code_values)
53+
54+
- 数字键0 - 9:返回`digital0` - `digital9`
55+
- 字母键A - z:返回`KeyA` - `KeyZ`
56+
- 功能键F1 - F12:返回 `F1` - `F12`
57+
- 方向键:返回`ArrowDown``ArrowUp``ArrowLeft``ArrowRight`
58+
- Alt 键:返回`AltLeft``AltRight`
59+
- Shift 键:返回`ShiftLeft``ShiftRight`
60+
- Ctrl 键:返回`ControLeft``ControlRight`
61+
62+
### KeyboardEvent.key
63+
64+
`KeyboardEvent.key`属性返回一个字符串,表示按下的键名。该属性只读。
65+
66+
如果按下的键代表可打印字符,则返回这个字符,比如数字、字母。
67+
68+
如果按下的键代表不可打印的特殊字符,则返回预定义的键值,比如 Backspace,Tab,Enter,Shift,Control,Alt,CapsLock,Esc,Spacebar,PageUp,PageDown,End,Home,Left,Right,Up,Down,PrintScreen,Insert,Del,Win,F1~F12,NumLock,Scroll 等。
69+
70+
如果同时按下一个控制键和一个符号键,则返回符号键的键名。比如,按下 Ctrl + a,则返回`a`;按下 Shift + a,则返回大写的`A`
71+
72+
如果无法识别键名,返回字符串`Unidentified`
73+
74+
### KeyboardEvent.location
75+
76+
`KeyboardEvent.location`属性返回一个整数,表示按下的键处在键盘的哪一个区域。它可能取以下值。
77+
78+
- 0:处在键盘的主区域,或者无法判断处于哪一个区域。
79+
- 1:处在键盘的左侧,只适用那些有两个位置的键(比如 Ctrl 和 Shift 键)。
80+
- 2:处在键盘的右侧,只适用那些有两个位置的键(比如 Ctrl 和 Shift 键)。
81+
- 3:处在数字小键盘。
82+
83+
### KeyboardEvent.repeat
84+
85+
`KeyboardEvent.repeat`返回一个布尔值,代表该键是否被按着不放,以便判断是否重复这个键,即浏览器会持续触发`keydown``keypress`事件,直到用户松开手为止。
86+
87+
## KeyboardEvent 的实例方法
88+
89+
### KeyboardEvent.getModifierState()
90+
91+
`KeyboardEvent.getModifierState()`方法返回一个布尔值,表示是否按下或激活指定的功能键。它的常用参数如下。
92+
93+
- `Alt`:Alt 键
94+
- `CapsLock`:大写锁定键
95+
- `Control`:Ctrl 键
96+
- `Meta`:Meta 键
97+
- `NumLock`:数字键盘开关键
98+
- `Shift`:Shift 键
99+
100+
```javascript
101+
if (
102+
event.getModifierState('Control') +
103+
event.getModifierState('Alt') +
104+
event.getModifierState('Meta') > 1
105+
) {
106+
return;
107+
}
108+
```
109+
110+
上面代码表示,只要`Control``Alt``Meta`里面,同时按下任意两个或两个以上的键就返回。
111+

0 commit comments

Comments
 (0)