如下图所示:这个 icon,既可以直接通过鼠标点击,又可以通过键盘 tab 键将 focus 移至其上,然后敲键盘回车键完成点击。


在代码里,如何判断这两种情形?

  @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.

keydown.tab 和 keydown.shift.tab 说明 tab 键被按下。

如果是鼠标点击,事件名称为 click,对应的事件对象类型为 MouseEvent.

更多Jerry的原创文章,尽在:“汪子熙”:

如何用 TypeScript 代码区分一个 button 动作是由键盘还是鼠标触发的相关推荐

  1. python月亮_如何用python代码画一个月亮

    如何用python代码画一个月亮 发布时间:2020-06-17 15:52:21 来源:亿速云 阅读:181 作者:元一 Python简介 Python是一种跨平台的计算机程序设计语言. 是一个高层 ...

  2. 在圣诞及元旦的日子里如何用html代码画一个爱心树

    一.前言 在圣诞节以及元旦节日来临的日子里,如果能亲自为自己所爱的人画一个爱心树,这肯定是个很浪漫的事.那么如何用代码画出圣诞树呢?用我的办法就能很简单的实现,复制-粘贴-另存就可完成. 二.创意名 ...

  3. 在Qt中如何用纯代码写一个本地视频播放器

    一.首先用纯代码写本地视频播放器需要用到以下类 #include <QWidget> #include <QHBoxLayout> //水平布局 #include <QV ...

  4. python炫酷动画源代码_Python小技巧:如何用Python代码发一个炫酷的朋友圈

    相信很多朋友在发朋友圈的时候,都会发一些话语,有些还会配一张图,但是普通的配图怎么符合我们程序员的身份呢?发出去都觉得没牌面,应该整点技术性的活. 今天给大家带来一个项目,这个小项目只用50行代码就能 ...

  5. 如何用Python代码发一个炫酷的朋友圈

    相信很多朋友在发朋友圈的时候,都会发一些话语,有些还会配一张图,但是普通的配图怎么符合我们程序员的身份呢?发出去都觉得没牌面,应该整点技术性的活. 今天给大家带来一个项目,这个小项目只用50行代码就能 ...

  6. 入门攻略丨教你用低代码实现一个简单的页面跳转功能

    一.介绍 HUAWEI DevEco Studio(后文简称:IDE)自2020年9月首次发布以来,经10次迭代升级,不断为HarmonyOS应用开发增强能力.3月31日,IDE再度升级到DevEco ...

  7. 人工智能换脸pythonapp_如何用小200行Python代码做一个换脸程序?

    今日不同往常,每周干货日,场主送出的不是成套的各类编程教学视频,而是一些轻应用实操.因为完成基本的理论学习之后,任何的呈现都在于如何应用及创新. 所以,在分享一系列教材类视频外,场主还会穿插着分享给大 ...

  8. python换脸完整程序_如何用小200行Python代码做一个换脸程序?

    今日不同往常,每周干货日,场主送出的不是成套的各类编程教学视频,而是一些轻应用实操.因为完成基本的理论学习之后,任何的呈现都在于如何应用及创新. 所以,在分享一系列教材类视频外,场主还会穿插着分享给大 ...

  9. ds--8600使用手册_我如何用57行代码复制一个价值8600万美元的项目

    ds--8600使用手册 by Tait Brown 泰特·布朗(Tait Brown) 我如何用57行代码复制一个价值8600万美元的项目 (How I replicated an $86 mill ...

最新文章

  1. 落地即一地鸡毛,AI落地存在的难题有哪些?
  2. 使用R实现一个简单的连续系统模拟
  3. node 关键点总结
  4. 解决fatal: 不是一个 git 仓库(或者任何父目录)的方法
  5. MySQL中事物的详解
  6. 【送给读者】全新苹果 AirPods,包邮送一套!
  7. 2006年9月全国计算机等级考试三级数据库技术笔试试卷(含有答案)
  8. 躺赚的意思不是做到高级别就觉得高枕无忧了
  9. Linux 命令(18)—— screen 命令
  10. 聊聊我对写好程序的认识
  11. DELPHI中完成端口(IOCP)的简单分析(1)
  12. css+js显示点阵字体/LED七段数码管字体(模拟)
  13. SODB、RBSP和EBSP
  14. ae导出gif插件_有了它,AE终于可以直接导出gif动图啦!
  15. 机器学习 特征选择(过滤法 封装法 嵌入法)
  16. JavaScript实现左右分栏宽度拉伸
  17. 190108每日一句
  18. 清新小学生文明礼仪PPT模板
  19. 阿里云MQTT_Password工具下载地址
  20. UBUNTU 16.04无线网卡驱动

热门文章

  1. 【纯干货】Amoeba实现MySQL主从同步与读写分离
  2. 第二章 Python数据类型详解
  3. SharePoint 2010 大中小架构的部署
  4. 【JavaScriptjQuery】返回顶部
  5. hadoop common 与 servlet 3冲突
  6. sql下员工工牌(YC0001)的简单实现和一些特殊查询
  7. 机器学习工程师 - Udacity 癌症检测深度学习
  8. Bootstrap开启模态框后对数据处理(标记模态框的开启与关闭状态)
  9. centos内核参数调优
  10. SDUT--Pots(二维BFS)