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"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值