首页 > 编程语言 >『江鸟中原』基于鸿蒙的抽奖小程序

『江鸟中原』基于鸿蒙的抽奖小程序

时间:2023-12-10 10:32:30浏览次数:46  
标签:江鸟 抽奖 img 鸿蒙 top li let prizes left

通过对鸿蒙的学习,我做了一个基于鸿蒙开发的小项目。

中原工学院RB软工移211班 王梦茹 202119144101

『江鸟中原』基于鸿蒙的抽奖小程序_html

案例介绍

开始时间,点击抽奖,Web页面的抽奖转盘会开始转动,结束抽奖后,原生页面会弹出一个提示弹窗,这个页面就涉及到Web页面和原生页面的双向交互

『江鸟中原』基于鸿蒙的抽奖小程序_html_02

具体实现步骤

『江鸟中原』基于鸿蒙的抽奖小程序_css_03

以上就是这个案例的开发流程,下面是具体实现

function startDraw() {
  // 开始抽奖,转盘转动,详见CodeLabs
  ...
  // 完成抽奖,等待1秒,调用弹窗代码
  timer = setTimeout(openDialog, 1000);
}

  // 弹窗代码: 传出奖品信息
  function openDialog() {
  confirm("XXX奖品”)
}


核心代码

『江鸟中原』基于鸿蒙的抽奖小程序_HarmonyOS_04

主要代码

let prizesArr = ["啤酒", "奶茶", "汉堡", "咖啡", "西瓜", "鸡腿", "柠檬", "蛋糕"];
let arrBigImg = ["./img/1-beer.png", "./img/2-milk.png", "./img/3-hamburg.png",
  "./img/4-coffee.png", "./img/5-watermelon.png", "./img/6-drumstick.png",
  "./img/7-lemon.png", "./img/8-cake.png", "./img/9-prizes.png"];

let allPrizesLi = document.querySelectorAll('.prizes-li');
let prizesImg = document.querySelectorAll('.pic');
let count = 0;
let isClick = true;
let index = 3;
let prizesPosition = 0;
let speed = 500;

for (let j = 0;j < prizesImg.length; j++) {
  prizesImg[j].src = arrBigImg[j];
}

function roll() {
  speed -= 50;
  if (speed <= 10) {
    speed = 10;
  }

  for (let j = 0; j < allPrizesLi.length; j++) {
    allPrizesLi[j].classList.remove('active');
  }
  prizesPosition++;

  if (prizesPosition >= allPrizesLi.length - 1) {
    prizesPosition = 0;
    count++;
  }

  allPrizesLi[prizesPosition].classList.add('active');
  let initSpeed = 500;
  let timer;
  let totalCount = 5;

  if (count >= totalCount && (prizesPosition + 1) === index) {
    clearTimeout(timer);
    isClick = true;
    speed = initSpeed;
    timer = setTimeout(openDialog, 1000);
  } else {
    timer = setTimeout(roll, speed);
    if (count >= totalCount - 1 || speed <= 50) {
      speed += 100;
    }
  }
}

function startDraw() {
  if (isClick) {
    count = 0;
    index = Math.floor(Math.random() * prizesArr.length + 1);
    roll();
    isClick = false;
  }
}

function openDialog() {
  confirm(prizesArr[prizesPosition]);
}
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="./css/index.css">
    <meta charset="UTF-8">
    <title>抽奖页面</title>
    <style>
        #prize {
            border-radius: 16px 16px 16px 16px;
            background-image: linear-gradient(180deg, #A2DAFF 0%, #EAF5FF 100%);
            margin-left: 1.82%;
            margin-top: 1.43%;
            width: 96.5%;
            height: 96.7%;
        }
    </style>
</head>
<body>
    <div class="luckyDraw">
        <!-- Use an unordered list to implement a lottery tray -->
        <ul id="prize" class="prizes">
            <li class="prizes-li active"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" src="#"></li>
            <li class="prizes-li"><img class="pic" onclick="startDraw()" src="#"></li>
        </ul>
    </div>
    <script src="./js/index.js"></script>
</body>
</html>
* {
    margin: 0;
    padding: 0;
    list-style: none;
    text-decoration: none;
}

img {
    width: 100%;
    height: 100%;
    margin: auto;
    display: block;
}

.prizes {
    width: 96.5%;
    height: 96.7%;
    position: absolute;
}

.trigger {
    font-size: 22px;
    text-align: center;
    display:block;
}

.prizes li {
    width: 30.6%;
    height: 30.6%;
    box-sizing: border-box;
    position: absolute;
}

.prizes li:nth-of-type(1) {
    left: 3.0%;
    top: 2.7%;
}

.prizes li:nth-of-type(2) {
    left: 34.9%;
    top: 2.6%;
}

.prizes li:nth-of-type(3) {
    left: 66.8%;
    top: 2.7%;
}

.prizes li:nth-of-type(4) {
    left: 66.8%;
    top: 34.6%;
}

.prizes li:nth-of-type(5) {
    left: 66.8%;
    top: 66.5%;
}

.prizes li:nth-of-type(6) {
    left: 34.9%;
    top: 66.5%;
}

.prizes li:nth-of-type(7) {
    left: 3.0%;
    top: 66.5%;
}

.prizes li:nth-of-type(8) {
    left: 3.0%;
    top: 34.6%;
}

.prizes li:nth-of-type(9) {
    left: 34.9%;
    top: 34.6%;
}

.active:after {
    top: 0;
    left: 0;
    width: 100%;
    content: "";
    height: 100%;
    position: absolute;
    opacity : 0.6;
    background-size: contain;
    background-image:url('../img/background.svg');
}

总结

在实际体验这个案例就会发现,可以加载本地的资源,也可以加载网络的资源,只不过需要传递不同的src地址,就可以实现本地资源和网络资源的在线切换,而其他的业务代码都是一样的


标签:江鸟,抽奖,img,鸿蒙,top,li,let,prizes,left
From: https://blog.51cto.com/u_16408482/8758191

相关文章

  • 鸿蒙开发 HarmonyOS DevEco Studio 常用快捷键
    前言做HarmonyOS鸿蒙开发离不开DevEcoStudio开发工具,DevEcoStudio是基于IntelliJIDEACommunity开源版本打造,所以默认的快捷键其实继承于IntelliJIDEA。熟悉DevEcoStudio的快捷键能提升开发效率和开发体验。下面将详细列出DevEcoStudio一些常用的快捷键,由......
  • 『江鸟中原』手表实现投骰子
    我是中工的葛腾辉,这是我的鸿蒙结课大作业,以下是我的作业报告。前言在日常的兵棋游戏中,投骰子是一个必不可少的环节,用来模拟各种概率,为了更方便的使用这个工具,我准备把投骰子功能移植到华为手表上。最终效果图创建项目DevEcoStudio下载安装成功后,打开DevEcoStudio,点击左上角的File......
  • 『江鸟中原』鸿蒙应用开发:实现新闻app
    大家好,我是中原工学院的张迅,以下是我的作业报告:   已知app主要为用户提供信息,使其能够实现信息流展示、页面跳转、搜索、评论等功能   这里主要以一款新闻类app为例,展开讲解,如图:一、观察页面所需要实现的效果:1.从本地后端获取新闻资讯Feed流 2.切换Teb页签 3.下拉......
  • 『江鸟中原』鸿蒙——设计聊天软件界面并实现登录跳转
    环境搭建软件要求 DevEcoStudio版本:DevEcoStudio4.0Beta1BuildVersion:4.0.0.201,builtonJune10,2023。 HarmonyOSSDK版本:APIversion9。硬件要求设备类型:华为手机或运行在DevEcoStudio上的华为手机设备模拟器。HarmonyOS系统:3.1.0DeveloperRelease。简要介......
  • 『江鸟中原』鸿蒙仿汽水音乐应用
    1.引言 在短视频火爆的今天,“刷”成为了老少皆宜的一项消遣娱乐的活动。那音乐能不能刷呢,答案当然是可以的。汽水音乐就实现了这个想法。汽水音乐也是抖音推出的一款音乐软件,因为我平时比较喜欢使用这款软件,这也是我做这个项目主要灵感来源。2.项目背景 自从短视频平台成为音乐......
  • 『江鸟中原』鸿蒙云函数开发
    概括CloudFunctions,是一项Serverless计算服务,提供FaaS(FunctionasaService)能力,一方面云函数将开发测试的对象聚焦到函数级别,可以帮助大幅简化应用开发与运维相关的事务,另一方面可以通过在应用中集成云函数SDK,便捷操作云数据库、云存储等,提升业务功能构建的便利性。云函数可......
  • 『江鸟中原』鸿蒙---CustomDialog
    我是中工的陈金灿,这是我的鸿蒙结课大作业,以下是我的作业报告。自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。一、创建自己第一个自定义弹窗1.1创建自定义弹......
  • 『江鸟中原』鸿蒙——计算器
    鸿蒙期末大作业1、简介使用开发工具DevEcostudio,用java语言编写一个简单的应用——计算机,本应用能够进行简单的加、减、乘、除混合运算。2、成果展示3、设计计算器各个按钮privatevoidinitData(){if(map==null)map=newHashMap<Component,String>();......
  • 鸿蒙原生应用开发——分布式数据对象
     01、什么是分布式数据对象在可信组网环境下,多个相互组网认证的设备将各自创建的对象加入同一个sessionId,使得加入的多个数据对象之间可以同步数据,也就是说,当某一数据对象属性发生变更时,其他数据对象会检测到这一变更,同时将自身属性更新。此时,该sessionId下的所有数据对象属......
  • 『江鸟中原』深入探索鸿蒙ArkTS:高效安全的跨语言开发体验
    随着鸿蒙操作系统的快速发展,跨语言开发成为了开发者们关注的焦点之一。鸿蒙ArkTS作为鸿蒙操作系统的重要组成部分,为开发者提供了一种高效、安全的跨语言开发体验。本文将深入探索鸿蒙ArkTS的语法,并通过实例代码演示其强大的功能和灵活性。ArkTS简介鸿蒙ArkTS是一种基于TypeScript......