如下图所示:这个 icon,既可以直接通过鼠标点击,又可以通过键盘 tab 键将 focus 移至其上,然后敲键盘回车键完成点击。
![](https://img.haomeiwen.com/i2085791/d83e8758edade244.png)
![](https://img.haomeiwen.com/i2085791/fccba2b67c88c4b9.png)
在代码里,如何判断这两种情形?
@HostListener('keydown.enter', ['$event'])
@HostListener('keydown.space', ['$event'])
handlePress(event: KeyboardEvent): void {
event?.preventDefault();
if (event?.target === this.element.nativeElement && !this.isOpen) {
this.eventSubject.next(PopoverEvent.OPEN_BY_KEYBOARD);
} else if (this.isOpen) {
this.eventSubject.next(PopoverEvent.CLOSE_BUTTON_KEYDOWN);
}
}
通过 @HostListener 监听指令宿主元素即 button 元素的 keydown.enter 和 keydown.space 事件。如果发生,说明键盘被按下来了。
这里的事件类型为 KeyboardEvent.
![](https://img.haomeiwen.com/i2085791/0866b535e52f18df.png)
keydown.tab 和 keydown.shift.tab 说明 tab 键被按下。
![](https://img.haomeiwen.com/i2085791/b41c5511f248c38f.png)
如果是鼠标点击,事件名称为 click,对应的事件对象类型为 MouseEvent.
![](https://img.haomeiwen.com/i2085791/c6e87f8f6847be2b.png)
更多Jerry的原创文章,尽在:"汪子熙":
![](https://img.haomeiwen.com/i2085791/97c4752c0e619c44.png)
网友评论