鸿蒙OS 事件

2020-09-18 13:57 更新

事件主要包括手势事件和按键事件。手势事件主要用于智能穿戴等具有触摸屏的设备,按键事件主要用于智慧屏设备。

手势事件

手势表示由单个或多个事件识别的语义动作(例如:点击、拖动和长按)。一个完整的手势也可能由多个事件组成,对应手势的生命周期。JS UI 框架支持的手势事件有:

触摸

  • touchstart:手指触摸动作开始。
  • touchmove:手指触摸后移动。
  • touchcancel:手指触摸动作被打断,如来电提醒、弹窗。
  • touchend:手指触摸动作结束。

点击

click:用户快速轻敲屏幕。

长按

longpress:用户在相同位置长时间保持与屏幕接触。

具体的使用示例如下:

  1. <!-- xxx.hml -->
  2. <div class="container">
  3. <div class="text-container" onclick="click">
  4. <text class="text-style">{{onclick}}</text>
  5. </div>
  6. <div class="text-container" ontouchstart="touchStart">
  7. <text class="text-style">{{touchStart}}</text>
  8. </div>
  9. <div class="text-container" ontouchmove="touchMove">
  10. <text class="text-style">{{touchMove}}</text>
  11. </div>
  12. <div class="text-container" ontouchend="touchEnd">
  13. <text class="text-style">{{touchEnd}}</text>
  14. </div>
  15. <div class="text-container" ontouchcancel="touchCancel">
  16. <text class="text-style">{{touchCancel}}</text>
  17. </div>
  18. <div class="text-container" onlongpress="longPress">
  19. <text class="text-style">{{onLongPress}}</text>
  20. </div>
  21. </div>

  1. /* xxx.css */
  2. .container {
  3. flex-direction: column;
  4. justify-content: center;
  5. align-items: center;
  6. }
  7. .text-container {
  8. padding-top: 10px;
  9. flex-direction: column;
  10. }
  11. .text-style {
  12. padding-top: 20px;
  13. padding-left: 100px;
  14. width: 750px;
  15. height: 100px;
  16. text-align: center;
  17. font-size: 50px;
  18. color: #ffffff;
  19. background-color: #09ba07;
  20. }

  1. // xxx.js
  2. export default {
  3. data: {
  4. textData: '',
  5. touchStart: 'touchstart',
  6. touchMove: 'touchmove',
  7. touchEnd: 'touchend',
  8. touchCancel: 'touchcancel',
  9. onClick: 'onclick',
  10. onLongPress: 'onlongpress',
  11. },
  12. onInit() {
  13. this.textData = 'initdata';
  14. },
  15. onReady: function () {},
  16. onShow: function () {},
  17. onHide: function () {},
  18. onDestroy: function () {},
  19. touchCancel: function (event) {
  20. this.touchCancel = 'canceled';
  21. },
  22. touchEnd: function(event) {
  23. this.touchEnd = 'ended';
  24. },
  25. touchMove: function(event) {
  26. this.touchMove = 'moved';
  27. },
  28. touchStart: function(event) {
  29. this.touchStart = 'touched';
  30. },
  31. longPress: function() {
  32. this.onLongPress = 'longpressed';
  33. },
  34. click: function() {
  35. this.onClick = 'clicked';
  36. },
  37. }

按键事件

按键事件是智慧屏上特有的手势事件,当用户操作遥控器按键时触发。用户点击一个遥控器按键,通常会触发两次 key 事件:先触发 action 为 0,再触发 action 为 1,即先触发按下事件,再触发抬起事件。action 为 2 的场景比较少见,一般为用户按下按键且不松开,此时 repeatCount 将返回次数。每个物理按键对应各自的按键值(keycode)以实现不同的功能,常用的按键值请参考组件通用事件。具体的使用示例如下:

  1. <!-- xxx.hml -->
  2. <div class="card-box">
  3. <div class="content-box">
  4. <text class="content-text" onkey="keyUp" onfocus="focusUp" onblur="blurUp">{{up}}</text>
  5. </div>
  6. <div class="content-box">
  7. <text class="content-text" onkey="keyDown" onfocus="focusDown" onblur="blurDown">{{down}}</text>
  8. </div>
  9. </div>

  1. /* xxx.css */
  2. .card-box {
  3. flex-direction: column;
  4. justify-content: center;
  5. }
  6. .content-box {
  7. align-items: center;
  8. height: 200px;
  9. flex-direction: column;
  10. margin-left: 200px;
  11. margin-right: 200px;
  12. }
  13. .content-text {
  14. font-size: 40px;
  15. text-align: center;
  16. }

  1. // xxx.js
  2. export default {
  3. data: {
  4. up: 'up',
  5. down: 'down',
  6. },
  7. focusUp: function() {
  8. this.up = 'up focused';
  9. },
  10. blurUp: function() {
  11. this.up = 'up';
  12. },
  13. keyUp: function() {
  14. this.up = 'up keyed';
  15. },
  16. focusDown: function() {
  17. this.down = 'down focused';
  18. },
  19. blurDown: function() {
  20. this.down = 'down';
  21. },
  22. keyDown: function() {
  23. this.down = 'down keyed';
  24. },
  25. }

按键事件通过获焦事件向下分发,因此示例中使用了 focus 事件和 blur 事件明确当前焦点的位置。点按上下键选中 up 或 down 按键,即相应的 focused 状态,失去焦点的按键恢复正常的 up 或 down 按键文本。按确认键后该按键变为 keyed 状态。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号