有时候需要监听某个按键来执行操作,比如监听 r
键的按下来执行确定的逻辑。如果对某个div进行监听,就会有焦点问题,因此最好是给 document 增加 keydown
事件。但是监听按键时不能影响现在的输入逻辑,比如在 input
中输入文字时,也会触发按键事件,所以需要对 event.target
做一定的筛选,符合条件的才能看做是快捷键事件。
export const isTargetInput = e => {
console.log(e.target);
return ['INPUT', 'TEXTAREA'].includes(e.target.tagName)
&& !['checkbox', 'button', 'file', 'hidden', 'image', 'radio',
'range', 'reset', 'submit' ].includes(e.target.type);
};
// 增加 keydown 监听事件
export function addKeydownHandler(callback) {
const handler = event => {
if (!isTargetInput(event)) {
callback(event);
event.stopPropagation();
}
};
document.addEventListener('keydown', handler);
this.$on('hook:beforeDestroy', () => {
document.removeEventListener('keydown', handler);
});
}