当前位置: 首页 > news >正文

ArkUI--抽奖

摘要:本文展示了一个基于ArkUI的生肖抽奖应用实现。通过@State管理当前选中索引(n1)、各卡片中奖次数(nums)和生肖图片资源(pics)。点击抽奖按钮时,启动15次循环动画后随机停在0-5索引位置,并在对应卡片Badge上累计中奖次数。界面包含3×2网格展示生肖图片,选中卡片显示红色边框,底部统计各卡片中奖次数。组件销毁时自动清除定时器,确保资源释放。该实现展示了ArkUI的状态管理、ForEach循环渲染、定时器动画和Badge组件等核心功能。
@Entry
@Component
struct Index {@State n1: number = -1; // 当前抽中的索引@State nums: number[] = [0, 0, 0, 0, 0, 0]; // 每张卡片的中奖次数@State pics: Resource[] = [$r("app.media.shengxiao1"),$r("app.media.shengxiao2"),$r("app.media.shengxiao3"),$r("app.media.shengxiao4"),$r("app.media.shengxiao5"),$r("app.media.shengxiao6")];private timer: number = 0; // 抽奖动画计时器private counter: number = 0; // 动画计数器private finalIndex: number = 0; // 最终中奖索引build() {Column() {// 抽奖标题图片Image($r("app.media.choujiang")).width(300).margin(20)// 抽奖按钮Button('抽奖').fontSize(25).width(150).height(50).margin(10).onClick(() => {// 停止之前的动画clearInterval(this.timer);this.counter = 0;// 随机生成最终中奖索引 (0-5)this.finalIndex = Math.floor(Math.random() * 6);// 开始抽奖动画this.timer = setInterval(() => {// 循环高亮每个选项this.n1 = this.counter % 6;this.counter++;// 15次循环后停在最终位置并增加计数if (this.counter > 15) {clearInterval(this.timer);this.n1 = this.finalIndex;// 增加对应卡片的中奖次数let newNums = [...this.nums];newNums[this.finalIndex] += 1;this.nums = newNums;}}, 100);})Grid() {ForEach(this.pics, (item: Resource, index: number) => {GridItem() {Badge({count: this.nums[index],maxCount: 99,position: BadgePosition.RightTop,style: {badgeSize: 50,badgeColor: Color.Brown,fontSize: 30,color: Color.White}}) {// 生肖图片Image(item).width(120).height(120).objectFit(ImageFit.Fill).border({width: this.n1 === index ? 5 : 0,color: this.n1 === index ? Color.Red : Color.Transparent}).borderRadius(10)}}.padding(10)})}.columnsTemplate('1fr 1fr 1fr') // 3列.rowsTemplate('1fr 1fr')        // 2行.width('90%').height('50%')Row() {ForEach(this.nums, (count: number, index: number) => {Column() {Text(`卡片${index + 1}`).fontSize(18).margin(5)Text(`${count}次`).fontSize(20).fontColor(Color.Blue)}.margin(10)})}.justifyContent(FlexAlign.SpaceAround).width('100%').margin(20)}.width('100%').height('100%').justifyContent(FlexAlign.Center)}// 组件销毁时清除计时器aboutToDisappear() {clearInterval(this.timer);}
}

相关文章:

  • dart实现单client连接的grpc server (以ip地址作判断)
  • 大数据时代的利剑:Bright Data网页抓取与自动化工具共建高效数据采集新生态
  • 2025年大一ACM训练-尺取
  • 代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法
  • methods的实现原理
  • Chainlink:连接 Web2 与 Web3 的去中心化桥梁
  • iOS 使用CocoaPods 添加Alamofire 提示错误的问题
  • 【Docker 新手入门指南】第十四章:Docker常用命令
  • HTML5实现简洁的端午节节日网站源码
  • 电子电路:深入了解4013D触发器的机制和原理
  • 设计模式之简单工厂模式
  • OSG编译wasm尝试
  • LVS-NAT 负载均衡群集
  • PHP7内核剖析 学习笔记 第九章 PHP基础语法的实现
  • 51. N-Queens
  • 【达梦】达梦数据库使用TypeHandler读取数据库时,将字段中的数据读取为数组
  • 用 Python 模拟雪花飘落效果
  • 【从零开始学习QT】快捷键、帮助文档、Qt窗口坐标体系
  • 集成均衡功能电池保护芯片在大功率移动电源的应用,创芯微CM1341-DAT、杰华特JW3312、赛微微电CW1244、中颖SH366006
  • 25平航杯复现
  • 杭州定制网站公司/哪家公司网站做得好
  • 上海 网站备案系统/缅甸在线今日新闻
  • 初中做网站用什么软件/互联网营销做什么
  • 流量购买网站/seo查询网站是什么
  • 南昌优化网站服务/南宁seo规则
  • wordpress页面百度不收录/seo博客大全