Input Event
一次键盘或鼠标事件(草案)
输入事件表达“在时刻 t 发生了一次键盘或鼠标操作”,由输入事件 Observer 形成观测。
粒度
键盘事件记的是人的按键操作。一次按下和一次释放各自形成观测内容和 Observation;长按期间系统自动重复的按下被过滤掉,松开后再按下才是下一次操作。
例如按住 A 一秒,按下时记一条 keyDown,松开时记一条 keyUp。按 Shift+A 时,Shift 和 A 的按下、释放各记一条,组合键本身不单独成为事件。
身份
每次按下、每次释放都有自己的身份和 Observation。时间戳相同的不同事件分别记下。
引用
目前没有引用。与设备的关联尚未确定。
事实时间
时间点型的 Observation:startAt = endAt = t,表示方式见 Observation · 事实时间。
EntitySchema
| 项目 | 值 |
|---|---|
| SchemaId | 019e1bbb-ec00-73ec-bf49-5a26143f9c12 |
| 显示名称 | 输入事件 |
| 说明 | 记录人的一次键盘或鼠标操作事件;键盘按下与释放分别记录,过滤长按自动重复,可按用户设置携带具体按键。Observation 表达事件发生的时间点。 |
| 资源名 | input-events |
| 字段 | 类型 | 必填 | 可空 | 含义 |
|---|---|---|---|---|
kind | string | 是 | 否 | 事件的类别,取值见下表 |
key | string | 否 | 否 | 键盘事件按的键。关闭具体按键记录时省略;鼠标事件没有这个字段 |
kind | 含义 |
|---|---|
keyDown | 键盘按下 |
keyUp | 键盘释放 |
mouseDown | 鼠标按钮按下 |
mouseUp | 鼠标按钮释放 |
mouseMove | 鼠标移动 |
mouseWheel | 鼠标滚动 |
kind 是跨平台的类别,系统 API 的常量留在实现中。key 表示按的是哪个键,它的跨平台编码尚未确定。哪种 kind 使用哪些字段,由业务代码遵守;EntitySchema 只声明字段的类型、必填和可空。
EntitySchema 的内容:
{
"displayName": "输入事件",
"description": "记录人的一次键盘或鼠标操作事件;键盘按下与释放分别记录,过滤长按自动重复,可按用户设置携带具体按键。Observation 表达事件发生的时间点。",
"resourceName": "input-events",
"fields": {
"kind": {
"type": "string",
"required": true,
"nullable": false
},
"key": {
"type": "string",
"required": false,
"nullable": false
}
}
}具体按键
是否记下具体按键,由输入事件 Observer 的用户设置决定,默认开启。开启时,按下和释放事件都带有 key;关闭时,事件仍有类别和对应的 Observation,只是省略 key。这个开关是采集设置,不是输入事件的字段。
key 记的是按了哪个键,与最终输入的文字无关。例如 Shift 和 A 各记各的键,“大写 A”这个结果不记;输入法最终生成的文字也不记。
示例
开启具体按键记录时,按下事件带有 key。A 键的编码尚未确定,下例用占位文字代替:
{
"references": {},
"properties": { "kind": "keyDown", "key": "<A 键标识>" }
}关闭具体按键记录时,省略 key:
{
"references": {},
"properties": { "kind": "keyDown" }
}待定
- 具体按键的跨平台编码。
- 鼠标采集哪些类别;是否保留按钮、坐标或滚动量。
- 事实时间取系统的事件时间,还是 Observer 收到事件的时刻,以及精度换算。
- 鼠标移动和滚动的粒度。