首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙HarmonyOS实战-ArkUI事件(键鼠事件)

  • 25-02-22 03:40
  • 3339
  • 6740
blog.csdn.net

前言

键鼠事件是指在计算机操作中,用户通过键盘和鼠标来与计算机进行交互的行为。常见的键鼠事件包括按下键盘上的键、移动鼠标、点击鼠标左键或右键等等。键鼠事件可以触发许多不同的操作,比如在文本编辑器中输入文字、在游戏中移动角色、在网页上点击链接等等。计算机操作系统和应用程序可以通过监听键鼠事件来响应用户的操作,并进行相应的处理。

一、键鼠事件

1.鼠标事件

?1.1 onHover

onHover是鼠标事件的一种,指的是鼠标悬停在某个元素上时触发的事件。当鼠标悬停在一个元素上时,可以通过onHover事件来执行一些特定的操作,比如显示提示信息、改变元素样式等。

onHover(event: (isHover?: boolean) => void)

案例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct MouseExample {
  5. @State isHovered: boolean = false;
  6. build() {
  7. Column() {
  8. Button(this.isHovered ? 'Hovered!' : 'Not Hover')
  9. .width(200).height(100)
  10. .backgroundColor(this.isHovered ? Color.Green : Color.Gray)
  11. .onHover((isHover: boolean) => { // 使用onHover接口监听鼠标是否悬浮在Button组件上
  12. this.isHovered = isHover;
  13. })
  14. }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  15. }
  16. }

在这里插入图片描述
好像本地模拟器,预览,远程真机都没效果

?1.2 onMouse

onMouse是一种在鼠标与页面的交互过程中出现的操作事件。它通常作为一种触发函数,当用户在页面上使用鼠标进行某种操作时,就会触发相应的事件,然后执行相应的操作。onMouse事件可以用于捕捉鼠标的各种操作,例如鼠标点击、鼠标移动、鼠标滚动、鼠标悬停等。

onMouse(event: (event?: MouseEvent) => void)

案例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct MouseExample {
  5. @State isHovered: boolean = false;
  6. @State buttonText: string = '';
  7. @State columnText: string = '';
  8. build() {
  9. Column() {
  10. Button(this.isHovered ? 'Hovered!' : 'Not Hover')
  11. .width(200)
  12. .height(100)
  13. .backgroundColor(this.isHovered ? Color.Green : Color.Gray)
  14. .onHover((isHover: boolean) => {
  15. this.isHovered = isHover
  16. })
  17. .onMouse((event: MouseEvent) => { // 给Button组件设置onMouse回调
  18. this.buttonText = 'Button onMouse:\n' + '' +
  19. 'button = ' + event.button + '\n' +
  20. 'action = ' + event.action + '\n' +
  21. 'x,y = (' + event.x + ',' + event.y + ')' + '\n' +
  22. 'screenXY=(' + event.screenX + ',' + event.screenY + ')';
  23. })
  24. Divider()
  25. Text(this.buttonText).fontColor(Color.Green)
  26. Divider()
  27. Text(this.columnText).fontColor(Color.Red)
  28. }
  29. .width('100%')
  30. .height('100%')
  31. .justifyContent(FlexAlign.Center)
  32. .borderWidth(2)
  33. .borderColor(Color.Red)
  34. .onMouse((event: MouseEvent) => { // 给Column组件设置onMouse回调
  35. this.columnText = 'Column onMouse:\n' + '' +
  36. 'button = ' + event.button + '\n' +
  37. 'action = ' + event.action + '\n' +
  38. 'x,y = (' + event.x + ',' + event.y + ')' + '\n' +
  39. 'screenXY=(' + event.screenX + ',' + event.screenY + ')';
  40. })
  41. }
  42. }

在这里插入图片描述

好像也没效果

事件冒泡是一种事件传播机制,指的是当一个元素触发了某个事件时,该事件会从触发元素开始向上层元素逐级传播,直到最顶层的元素为止。在事件冒泡的过程中,父级元素会逐级接收该事件,并可以选择是否处理该事件。

具体来说,当一个元素触发了某个事件时(比如鼠标点击、按键按下等),会先执行触发元素上绑定的事件处理函数,然后事件会向上级元素传播,逐级执行上级元素上绑定的事件处理函数,直到达到文档顶层的根元素或者事件被停止传播为止。

事件冒泡的好处在于它可以让事件的处理更加灵活。通过将事件处理程序绑定在祖先元素上,可以实现对后代元素的事件统一管理。比如,当页面中有多个按钮时,可以通过将点击事件处理程序绑定在父元素上,来处理所有按钮的点击事件,避免了为每个按钮都绑定事件处理函数的繁琐。

事件冒泡有时也可能会带来一些问题。当多个元素重叠时,事件触发后会逐级向上冒泡,导致多个元素都接收到了该事件,可能会产生意外的行为。在这种情况下,可以通过使用事件的stopPropagation()方法来阻止事件继续传播,或者使用事件的target属性来判断事件源,从而实现精确控制事件的处理。

event.stopPropagation()可以阻止事件冒泡

  1. Button(this.isHovered ? 'Hovered!' : 'Not Hover')
  2. .width(200)
  3. .height(100)
  4. .backgroundColor(this.isHovered ? Color.Green : Color.Gray)
  5. .onHover((isHover: boolean) => {
  6. this.isHovered = isHover;
  7. })
  8. .onMouse((event: MouseEvent) => {
  9. event.stopPropagation(); // 在Button的onMouse事件中设置阻止冒泡
  10. this.buttonText = 'Button onMouse:\n' + '' +
  11. 'button = ' + event.button + '\n' +
  12. 'action = ' + event.action + '\n' +
  13. 'x,y = (' + event.x + ',' + event.y + ')' + '\n' +
  14. 'screenXY=(' + event.screenX + ',' + event.screenY + ')';
  15. })

?1.3 hoverEffect

hover effect是指当鼠标悬停在一个元素上时,触发特定的效果。

hoverEffect(value: HoverEffect)
HoverEffect枚举值效果说明
Auto组件默认提供的悬浮态效果,由各组件定义。
Scale动画播放方式,鼠标悬浮时:组件大小从100%放大至105%,鼠标离开时:组件大小从105%缩小至100%。
Highlight动画播放方式,鼠标悬浮时:组件背景色叠加一个5%透明度的白色,视觉效果是组件的原有背景色变暗,鼠标离开时:组件背景色恢复至原有样式。
None禁用悬浮态效果
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct HoverExample {
  5. build() {
  6. Column({ space: 10 }) {
  7. Button('Auto')
  8. .width(170).height(70)
  9. Button('Scale')
  10. .width(170).height(70)
  11. .hoverEffect(HoverEffect.Scale)
  12. Button('Highlight')
  13. .width(170).height(70)
  14. .hoverEffect(HoverEffect.Highlight)
  15. Button('None')
  16. .width(170).height(70)
  17. .hoverEffect(HoverEffect.None)
  18. }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  19. }
  20. }

在这里插入图片描述

2.按键事件

?2.1 onKeyEvent

onKeyEvent是一个在编程中常见的事件处理函数,用于处理按键事件。当用户按下或释放一个按键时,系统会生成一个按键事件,然后通过调用onKeyEvent函数来处理这个事件。

在onKeyEvent函数中,可以根据发生的按键事件类型,采取相应的处理逻辑。比如,可以判断按下的按键是哪个键,然后执行相应的操作。常见的操作包括:移动游戏角色、打开菜单、执行特定的动作等等。

onKeyEvent(event: (event?: KeyEvent) => void)

案例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct KeyEventExample {
  5. @State buttonText: string = '';
  6. @State buttonType: string = '';
  7. @State columnText: string = '';
  8. @State columnType: string = '';
  9. build() {
  10. Column() {
  11. Button('onKeyEvent')
  12. .width(140).height(70)
  13. .onKeyEvent((event: KeyEvent) => { // 给Button设置onKeyEvent事件
  14. if (event.type === KeyType.Down) {
  15. this.buttonType = 'Down';
  16. }
  17. if (event.type === KeyType.Up) {
  18. this.buttonType = 'Up';
  19. }
  20. this.buttonText = 'Button: \n' +
  21. 'KeyType:' + this.buttonType + '\n' +
  22. 'KeyCode:' + event.keyCode + '\n' +
  23. 'KeyText:' + event.keyText;
  24. })
  25. Divider()
  26. Text(this.buttonText).fontColor(Color.Green)
  27. Divider()
  28. Text(this.columnText).fontColor(Color.Red)
  29. }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  30. .onKeyEvent((event: KeyEvent) => { // 给父组件Column设置onKeyEvent事件
  31. if (event.type === KeyType.Down) {
  32. this.columnType = 'Down';
  33. }
  34. if (event.type === KeyType.Up) {
  35. this.columnType = 'Up';
  36. }
  37. this.columnText = 'Column: \n' +
  38. 'KeyType:' + this.buttonType + '\n' +
  39. 'KeyCode:' + event.keyCode + '\n' +
  40. 'KeyText:' + event.keyText;
  41. })
  42. }
  43. }

在这里插入图片描述

 ?写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing?,不定期分享原创知识。
  • 想要获取个人更多完整鸿蒙最新VIP学习资料,请点击→全套鸿蒙HarmonyOS学习资料
  • 或者关注小编后私信回复【666】也可获取资料哦~~

最新鸿蒙Next全套学习资料请扫码
微信名片
注:本文转载自blog.csdn.net的蜀道山QAQ的文章"https://blog.csdn.net/shudaoshanQAQ/article/details/135460933"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top