开启鸿蒙开发之旅:交互——点击事件

前一节我们写好了"提醒事项"APP首页的静态页面,光有静态页面肯定是不够的,更重要的是交互,今天这一节我将来学习最常用的交互事件------点击事件。

点击事件

说明:组件被点击时触发的事件

作用:监听(感知)用户点击行为,进行对应操作

在添加按钮上增加点击事件,点击后弹出添加弹窗。

实现步骤


1、设置动态变量model_zIndex

设置动态zIndex来动态控制弹窗的zIndex的层级,当需要显示时,将层级调高,隐藏时层级调低。

javascript 复制代码
@State model_zIndex:number = -1

2、给弹窗绑定动态zIndex

javascript 复制代码
Coloum(){
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.End)
.backgroundColor('#cd000000')
.zIndex(this.model_zIndex)

3、给元素绑定点击事件

在鸿蒙OS Next中,绑定点击事件直接在元素上.onClick,在点击事件中动态改变model_zIndex 的值:

javascript 复制代码
 Image($r('app.media.ic_add'))
          .width(20)
          .fillColor('#007AFF')
          .margin({
            right: 10
          })
          .onClick(() => {
            this.model_zIndex = 99
          })

4、隐藏弹窗

在"取消"按钮上绑定点击事件,并在点击事件中修改 model_zIndex的值:

javascript 复制代码
 Text('取消')
   .fontSize(18)
   .fontColor('#007AFF')
   .onClick(() => {
    this.model_zIndex = -1
     })

完整代码


index.ets文件的完整代码如下:

javascript 复制代码
interface card {
  icon: string
  num: number
  bgColor: string
  iconNum: boolean,
  title: string
}

interface list {
  icon: string
  bgColor: string
  title: string
  num: number
}
console.log('2222')
@Entry
@Component
struct Index {
  @State cardData: card[] = [
    {
      icon: 'app.media.ic_date',
      num: 4,
      bgColor: '#007AFF',
      iconNum: true,
      title: '今天'
    },
    {
      icon: 'app.media.ic_date2',
      num: 4,
      bgColor: '#ff3a2f',
      iconNum: false,
      title: '计划'
    },
    {
      icon: 'app.media.ic_box',
      num: 6,
      bgColor: '#000',
      iconNum: false,
      title: '全部'
    },
    {
      icon: 'app.media.ic_qizi',
      num: 0,
      bgColor: '#ff9501',
      iconNum: false,
      title: '旗标'
    },
    {
      icon: 'app.media.ic_ok',
      num: 0,
      bgColor: '#596772',
      iconNum: false,
      title: '完成'
    }
  ]

  @State listData:list[] = [
    {
    icon: 'app.media.ic_list',
    bgColor:'#007AFF',
    title:'提醒事项',
    num:6
  },
    {
      icon: 'app.media.ic_list',
      bgColor:'#ff9501',
      title:'提醒',
      num:0
    }
  ]

  @State model_zIndex:number = -1
  @State addButtonColor:string = '#ccc'
  build() {

    Stack() {
      Column() {
        Row() {
          Image($r('app.media.ic_search'))
            .width(30)
            .fillColor(Color.Gray)
          TextInput({ placeholder: '搜索' })
            .layoutWeight(1)
            .backgroundColor(Color.Transparent)
          Image($r('app.media.ic_voice'))
            .width(30)
            .fillColor(Color.Gray)
        }
        .width('100%')
        .height(50)
        .backgroundColor('#e4e3e9')
        .borderRadius(15)
        .padding({
          left: 10,
          right: 10
        })

        Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.SpaceBetween }) {
          ForEach(this.cardData, (item: card, index) => {
            Row() {
              Column({ space: FlexAlign.SpaceBetween }) {
                Stack() {
                  Row() {
                    Image($r(item.icon))
                      .width(index == 2 ? 20 : 30)
                  }
                  .width(40)
                  .height(40)
                  .borderRadius(40)
                  .backgroundColor(item.bgColor)
                  .justifyContent(FlexAlign.Center)

                  if (item.iconNum) {
                    Text('12')
                      .fontColor(Color.White)
                      .fontSize(12)
                      .margin({
                        right: 3,
                        top: 5
                      })
                  }

                }

                Text(item.title)
                  .fontColor(Color.Gray)
                  .fontSize(18)
              }
              .height('100%')

              Blank()
              Text(String(item.num))
                .fontSize(30)
                .fontWeight(FontWeight.Bold)
            }
            .width('48%')
            .height(90)
            .backgroundColor('#e4e3e9')
            .borderRadius(15)
            .padding(10)
            .alignItems(VerticalAlign.Top)
            .margin({
              bottom: 10
            })
          })


        }
        .margin({
          top: 10
        })

        Text('我的列表')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .alignSelf(ItemAlign.Start)
          .margin({
            left: 10,
            bottom: 10
          })
        List() {
          ForEach(this.listData,(item:list,index) => {
            ListItem() {
              Row() {
                Row() {
                  Image($r(item.icon))
                    .width(20)
                    .fillColor(Color.White)
                }
                .width(30)
                .height(30)
                .borderRadius(30)
                .backgroundColor(item.bgColor)
                .justifyContent(FlexAlign.Center)
                .margin({
                  right: 10
                })

                Text(item.title)
                Blank()
                Text(String(item.num))
                Image($r('app.media.ic_right')).width(20)
                Text('')
                  .width('90%')
                  .height(0.5)
                  .backgroundColor('#ccc')
                  .position({
                    bottom: -10,
                    right: -10
                  })

              }

              .width('100%')
              .justifyContent(FlexAlign.SpaceBetween)

            }
            .height(50)
            .width('100%')
            .padding({
              left: 10,
              right: 10
            })
          })



        }
        .backgroundColor(Color.White)
        .borderRadius(10)

      }
      .width('100%')
      .height('100%')
      .padding(15)
      .backgroundColor('#fff2f8')

      Row() {
        Image($r('app.media.ic_add'))
          .width(20)
          .fillColor('#007AFF')
          .margin({
            right: 10
          })
          .onClick(() => {
            this.model_zIndex = 99
          })
        Text('添加提醒事项')
          .fontColor('#007AFF')
        Blank()
        Text('添加列表')
          .fontColor('#007AFF')
      }
      .width('100%')
      .padding(15)

      Column(){
        Column(){
          Row() {
            Text('取消')
              .fontSize(18)
              .fontColor('#007AFF')
              .onClick(() => {
                this.model_zIndex = -1
              })
            Text('新提醒事项')
              .fontSize(20)
              .fontWeight(FontWeight.Bold)
            Text('添加')
              .fontSize(18)
              .fontColor(this.addButtonColor)
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
          Column() {
            TextInput({placeholder:'标题'})
              .backgroundColor('#fff')
              .borderRadius(0)
            Text('')
              .width('95%')
              .height(0.5)
              .backgroundColor('#ccc')
              .alignSelf(ItemAlign.End)
            TextInput({placeholder:'备注'})
              .backgroundColor('#fff')
          }
          .width('100%')
          .height(180)
          .backgroundColor('#fff')
          .padding({
            top:5
          })
          .borderRadius(10)
          .margin({
            top:20
          })

          Row(){
            Text('详细信息')
            Blank()
            Image($r('app.media.ic_right'))
              .width(20)
          }
          .width('100%')
          .height(50)
          .backgroundColor('#fff')
          .margin({
            top:20
          })
          .padding(10)
          .borderRadius(6)

          Row() {
            Row(){
              Image($r('app.media.ic_list'))
                .width(20)
                .fillColor('#fff')
            }
            .width(30)
            .height(30)
            .borderRadius(30)
            .backgroundColor('#007AFF')
            .justifyContent(FlexAlign.Center)
            .margin({
              right:10
            })

            Text('列表')
            Blank()
            Text('提醒事项')
            Image($r('app.media.ic_right'))
              .width(20)
          }
          .width('100%')
          .height(50)
          .backgroundColor('#fff')
          .margin({
            top:20
          })
          .padding(10)
          .borderRadius(6)
        }
        .width('100%')
        .height('95%')
        .backgroundColor('#fff2f8')
        .padding(10)


      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.End)
      .backgroundColor('#cd000000')
      .zIndex(this.model_zIndex)
    }
    .alignContent(Alignment.Bottom)

  }
}
相关推荐
IT猿人6 分钟前
仓颉原生应用编程语言教程(第5期)
开发·鸿蒙·华为仓颉
狂奔solar8 分钟前
分享个好玩的,在k8s上部署web版macos
前端·macos·kubernetes
qiyi.sky11 分钟前
JavaWeb——Web入门(8/9)- Tomcat:基本使用(下载与安装、目录结构介绍、启动与关闭、可能出现的问题及解决方案、总结)
java·前端·笔记·学习·tomcat
清云随笔32 分钟前
axios 实现 无感刷新方案
前端
鑫宝Code34 分钟前
【React】状态管理之Redux
前端·react.js·前端框架
忠实米线42 分钟前
使用pdf-lib.js实现pdf添加自定义水印功能
前端·javascript·pdf
pink大呲花44 分钟前
关于番外篇-CSS3新增特性
前端·css·css3
鸿蒙自习室1 小时前
鸿蒙动画开发06——打断动画
ui·华为·harmonyos·鸿蒙
少年维持着烦恼.1 小时前
第八章习题
前端·css·html
我是哈哈hh1 小时前
HTML5和CSS3的进阶_HTML5和CSS3的新增特性
开发语言·前端·css·html·css3·html5·web