|
@@ -51,15 +51,35 @@
|
|
|
changeRecordList.push(event)
|
|
changeRecordList.push(event)
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+const normalizeKey = (event: KeyboardEvent) => {
|
|
|
|
|
+ let key = event.key
|
|
|
|
|
+
|
|
|
|
|
+ // Shift + 数字 → 符号(包含 0 -> ))
|
|
|
|
|
+ const shiftNumMap: Record<string, string> = {
|
|
|
|
|
+ '1': '!', '2': '@', '3': '#', '4': '$', '5': '%',
|
|
|
|
|
+ '6': '^', '7': '&', '8': '*', '9': '(', '0': ')'
|
|
|
|
|
+ }
|
|
|
|
|
+ if (event.shiftKey && shiftNumMap[key]) {
|
|
|
|
|
+ return shiftNumMap[key]
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Shift + 字母 → 大写
|
|
|
|
|
+ if (event.shiftKey && /^[a-z]$/i.test(key)) {
|
|
|
|
|
+ return key.toUpperCase()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return key
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const handleKeydown = (event: KeyboardEvent) => {
|
|
const handleKeydown = (event: KeyboardEvent) => {
|
|
|
// 增加对Shift组合键的识别
|
|
// 增加对Shift组合键的识别
|
|
|
// 在handleKeyup中增加对组合键的识别
|
|
// 在handleKeyup中增加对组合键的识别
|
|
|
- let key = event.key
|
|
|
|
|
- if (event.shiftKey && /^[0-9]$/.test(key)) {
|
|
|
|
|
- key = "!@#$%^&*()"[parseInt(key) - 1]; // 映射Shift+数字到符号
|
|
|
|
|
- } else if(event.shiftKey && /^[a-z]$/i.test(event.key) ){
|
|
|
|
|
- key = event.key.toUpperCase()
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ let key = normalizeKey(event)
|
|
|
|
|
+ // if (event.shiftKey && /^[0-9]$/.test(key)) {
|
|
|
|
|
+ // key = "!@#$%^&*()"[parseInt(key) - 1]; // 映射Shift+数字到符号
|
|
|
|
|
+ // } else if(event.shiftKey && /^[a-z]$/i.test(event.key) ){
|
|
|
|
|
+ // key = event.key.toUpperCase()
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
// 存储down事件信息到keyEventMap中
|
|
// 存储down事件信息到keyEventMap中
|
|
|
if (!keyEventMap[key]) {
|
|
if (!keyEventMap[key]) {
|
|
@@ -107,9 +127,12 @@
|
|
|
return result
|
|
return result
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const isCtrlOrMeta = (event: KeyboardEvent) => event.ctrlKey === true || event.metaKey === true
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
const handleKeyup = (event: KeyboardEvent) => {
|
|
const handleKeyup = (event: KeyboardEvent) => {
|
|
|
const realTime = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")
|
|
const realTime = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")
|
|
|
- const key = event.key;
|
|
|
|
|
|
|
+ const key = normalizeKey(event);
|
|
|
// 处理所有与该按键key有关的keydown行为
|
|
// 处理所有与该按键key有关的keydown行为
|
|
|
while (keyEventMap[key] && keyEventMap[key].length > 0) {
|
|
while (keyEventMap[key] && keyEventMap[key].length > 0) {
|
|
|
// 取得keydown事件信息
|
|
// 取得keydown事件信息
|
|
@@ -151,23 +174,23 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
- // 粘贴
|
|
|
|
|
- else if ((key === 'c' || key === 'C') && event.ctrlKey === true) {
|
|
|
|
|
|
|
+ // 复制
|
|
|
|
|
+ else if ((key === 'c' || key === 'C') && isCtrlOrMeta(event)) {
|
|
|
changeRecordList[i] = {
|
|
changeRecordList[i] = {
|
|
|
...changeRecordList[i],
|
|
...changeRecordList[i],
|
|
|
...combinedEvent,
|
|
...combinedEvent,
|
|
|
pauseTime: combinedEvent.startStamp - getPause(i),
|
|
pauseTime: combinedEvent.startStamp - getPause(i),
|
|
|
- type: 'paste'
|
|
|
|
|
|
|
+ type: 'copy'
|
|
|
}
|
|
}
|
|
|
break
|
|
break
|
|
|
}
|
|
}
|
|
|
- // 复制
|
|
|
|
|
- else if ((key === 'v' || key === 'V') && event.ctrlKey === true) {
|
|
|
|
|
|
|
+ // 粘贴
|
|
|
|
|
+ else if ((key === 'v' || key === 'V') && isCtrlOrMeta(event)) {
|
|
|
changeRecordList[i] = {
|
|
changeRecordList[i] = {
|
|
|
...changeRecordList[i],
|
|
...changeRecordList[i],
|
|
|
...combinedEvent,
|
|
...combinedEvent,
|
|
|
pauseTime: combinedEvent.startStamp - getPause(i),
|
|
pauseTime: combinedEvent.startStamp - getPause(i),
|
|
|
- type: 'copy'
|
|
|
|
|
|
|
+ type: 'paste'
|
|
|
}
|
|
}
|
|
|
break
|
|
break
|
|
|
}
|
|
}
|