keyup常用事件_keyup事件问题
問題
我自己寫了一個可以自定義監聽快捷鍵組合的模塊,
在寫按鍵彈起的函數時候,發現了一個奇怪的現象。
如果我先按下?(不松開)再按D,
此時松開D 不會觸發 keyup
如果我先按下D(不松開)再按?,
此時松開?則會觸發 keyup
代碼
const Immutable = require('immutable');
let listenList = Immutable.Map({});
let keyDownGroup = [];
const getKeyGroupString = keyGroupArray => {
let keyGroup = Array.from(keyGroupArray);
keyGroup.sort();
return keyGroup.join(',');
}
/**
* 添加快捷鍵監聽
* kg Array 快捷鍵組合
* handler Function 被監聽的事件
**/
const addListener = (kg, handler) => {
let keyGroup = getKeyGroupString(kg);
listenList = listenList.update(
keyGroup,
handlerList => handlerList ? handlerList.push(handler) : Immutable.List([handler])
);
};
/**
* 移除快捷鍵監聽
* kg Array 快捷鍵組合
* deleteHandler Function 要被移除監聽的事件(如果為空則移除該快捷鍵組合的所有事件)
**/
const removeListener = (kg, deleteHandler) => {
let keyGroup = getKeyGroupString(kg);
if (listenList.hash(keyGroup)) {
if (deleteHandler) {
listenList = listenList.update(
keyGroup,
handlerList => handlerList.filter(handler => handler !== deleteHandler)
);
} else {
listenList = listenList.delete(keyGroup);
}
}
}
window.addEventListener('keydown', event => {
keyDownGroup = Array.from(new Set([...keyDownGroup, event.keyCode]))
let keyDownGroupString = getKeyGroupString(keyDownGroup);
if (listenList.has(keyDownGroupString)) {
listenList.get(keyDownGroupString).forEach(
handler => handler()
);
}
});
window.addEventListener('keyup', event => {
// 出現奇怪問題的地方……
console.log('keyup...');
// keyDownGroup = [];
keyDownGroup.pop();
});
module.exports = {
addListener,
removeListener
}
userAgent
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.110 Electron/0.36.7 Safari/537.36"
總結
以上是生活随笔為你收集整理的keyup常用事件_keyup事件问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 百度账号注册界面_基于百度AI
- 下一篇: easyui树拖拽排序java_easy