返回顶部
首页 > 资讯 > 前端开发 > JavaScript >基于vue3实现一个抽奖小项目
  • 599
分享到

基于vue3实现一个抽奖小项目

vue3抽奖项目vue3抽奖 2023-01-28 06:01:02 599人浏览 泡泡鱼
摘要

目录前言数据保存姓名切换奖项切换历史记录数据导入结语前言 在公司年会期间我做了个抽奖小项目,我把它分享出来,有用得着的可以看下。浏览链接:Http://xisite.top/orig

前言

  • 在公司年会期间我做了个抽奖小项目,我把它分享出来,有用得着的可以看下。
  • 浏览链接:Http://xisite.top/original/luck-draw/index.html
  • 项目链接:https://gitee.com/xi1213/luck-draw (欢迎star!)项目截图:

实现目标数据保存:无后端,纯前端实现,浏览器刷新或者关闭数据不能丢失。姓名切换:点击中部开始按钮姓名快速切换。奖项切换:奖项为操作人员手动切换设置。历史记录:抽奖完成后需要有历史记录。数据导入:允许参与人员的表格导入。

数据保存

无后台,纯前端实现而且需要刷新关闭浏览器数据不丢失,很容易便会想到使用localStorage,localStorage存入的数据具有持久性,不会因为刷新或关闭浏览器而变化(除非手动刻意的清除),有别于sessionstorage,localStorage的生命周期是永久,sessionstorage是浏览器或者标签页关闭。

因为存入的数据不是单纯的字符串,而是具有结构性的对象数组,所以需要配合JSON.stringify与jsON.parse来使用。这是存入数据的方法:

localStorage.setItem("luckDrawHis", JSON.stringify(luckDrawHis));//JSON.stringify将json转换为字符串

这是读取数据的方法:

JSON.parse(localStorage.getItem("luckDrawHis"))//JSON.parse将字符串转换为json

姓名切换

抽奖的方式是数据导入后,点击中间的圆形开始按钮,姓名便开始快速切换,再次点击按钮便停止姓名切换,弹出对话框显示当前姓名以及设置的奖项。

切换姓名利用了Vue的数据响应式原理。先获取到所有的参与人员数据,然后乱序处理,最后循环展示,我这里每个姓名展示的时间为50毫秒,你也可以自己设置。这里的数组乱序我使用了洗牌算法,其实就是利用Math.random获取数组的随机下标,然后与最后一个元素进行位置交换。

//洗牌算法(乱序数组)
function shuffle(arr) {
  let l = arr.length
  let index, temp
  while (l > 0) {
    index = Math.floor(Math.random() * l)
    temp = arr[l - 1]
    arr[l - 1] = arr[index]
    arr[index] = temp
    l--
  }
  return arr;
}
 
//循环列表
function forNameList(list) {
  list = shuffle(list);
  for (let i = 0; i < list.length; i++) {
    setTimeout(() => {
      if (!isStop.value) {
        curName.value = list[i].name;
        (i == list.length - 1) && (forNameList(nameList.value));//数组耗尽循环
      }
    }, 50 * i);
  }
}

奖项切换

奖项切换直接使用elementPlus的单选框即可。

历史记录

每次点击抽奖出现结果时,将之前的抽奖结果取出来,然后把当前的结果添加到末尾。

点击抽奖历史按钮时再将所有历史数据取出来。

数据导入

由于需要导入人员表格数据,这里我使用了xlsx插件与file-saver插件来实现。

首先是下载模板。

将事先准备好的表格模板放在项目的public目录下。

点击下载模板按钮时直接调用以下方法即可,其中的saveAs是file-saver插件中的方法,传入路径与文件名即可。

import { saveAs } from 'file-saver';
//下载模板
function downTemp() {
    let fileName = "人员模板.xlsx";//文件名
    let fileUrl = "./template/";//文件路径(路径相对index.html)
    saveAs(fileUrl + fileName, fileName);
}

表格处理好,

点击导入按钮读取表格数据时使用的是xlsx插件,下面是读取数据的方法。

import * as XLSX from "xlsx";
//导入数据
function importData(e) {
    isLoading.value = true;
    let file = e.target.files[0]; //获取事件中的file对象
    let fileReader = new FileReader(); //创建文件读取器
    fileReader.onload = (event) => {
        let result = event.target.result; //获取读取的结果
        let workBook = XLSX.read(result, { type: "binary" }); //XLSX读取返回的结果
        let jsonData = XLSX.utils.sheet_to_json(
            workBook.Sheets[workBook.SheetNames[0]]
        ); //将读取结果转换为json
        tabData.value = [];
        jsonData.forEach((j) => {
            tabData.value.push({
                name: j.姓名,
                age: j.性别,
                department: j.部门,
            });
        }); //处理成需要的数据格式
        localStorage.setItem("tabData", JSON.stringify(tabData.value));//数据存入本地
        tabDataS.value = JSON.parse(localStorage.getItem("tabData"));//取出数据
        emits("getNameList", tabData);
        isLoading.value = false;
    };
    fileReader.readAsBinaryString(file); //开始读取文件
    ((document.getElementsByClassName("inp-xlsx")[0]).value = ""); //置空选中的文件
};

结语

  • 项目很简单,但给我的时间很少,很多优化的地方都没做好,后面有时间了再优化下,顺便适配下移动端。
  • 原文地址:https://xiblogs.top/?id=53

到此这篇关于基于vue3实现一个抽奖小项目的文章就介绍到这了,更多相关vue3抽奖项目内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于vue3实现一个抽奖小项目

本文链接: https://lsjlt.com/news/178332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于vue3实现一个抽奖小项目
    目录前言数据保存姓名切换奖项切换历史记录数据导入结语前言 在公司年会期间我做了个抽奖小项目,我把它分享出来,有用得着的可以看下。浏览链接:http://xisite.top/orig...
    99+
    2023-01-28
    vue3抽奖项目 vue3抽奖
  • 基于Python编写一个微博抽奖小程序
    目录导语开发工具环境搭建先睹为快原理简介导语 带大家写个微博自动抽奖小程序吧,motivation和之前的B站自动抽奖小程序一样: 不想内卷了,整个B站全自动抽奖的小程序吧,万一不小...
    99+
    2024-04-02
  • 基于Python实现商场抽奖小系统
    目录导语一、运行环境二、素材(图片等)三、代码展示​四、效果展示导语 嘿!下午好,木子来上新啦~ 期待今天的内容嘛?挠头.jpg 日常等更新的小可爱们我来了。看看给大家带来了什么好东...
    99+
    2024-04-02
  • 基于Python怎么编写一个微博抽奖小程序
    本篇内容主要讲解“基于Python怎么编写一个微博抽奖小程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python怎么编写一个微博抽奖小程序”吧!开发工具Python版本:3.7.8相关...
    99+
    2023-06-30
  • 基于Redis实现抽奖功能及问题小结
    1、分析 公司年底要做年会所有的员工都要参与抽奖的环节 平台的产品要进行抽奖活动 这个时候我们可以利用redis中的set集合中的spop来实现。 特征:抽奖成功...
    99+
    2024-04-02
  • 基于JavaScript实现轮盘抽奖功能
    目录实现步骤html代码:css代码:js代码:不知道今天自己该吃什么,一招帮你解决选择困难症。通过html+css+js实现一个轮盘抽奖功能。我们可以将平时吃的饭菜输入到代码中,每...
    99+
    2023-01-13
    js轮盘抽奖 js抽奖
  • 一个基于vue3+ts+vite项目搭建初探
    目录前言环境准备使用Vite快捷搭建使用npm使用yarn安装依赖启动项目修改vite配置文件找到根目录vite.config.ts文件打开集成路由集成Vuex添加element u...
    99+
    2024-04-02
  • 基于Python编写一个B站全自动抽奖的小程序
    目录导语开发工具环境搭建原理简介导语 应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不错过任何...
    99+
    2024-04-02
  • 用Python实现一个简单的抽奖小程序
    目录写在前面 实现结果 1 数据拉取2 数据清洗、去重3 中奖数据抽取python 相关知识点总结写在前面  因为粉丝福利,所以想自己写一个抽...
    99+
    2023-05-12
    python抽奖系统 python随机抽奖 python抽奖游戏
  • 基于Unity编写一个九宫格抽奖软件
    目录一、前言二、效果图三、案例制作1.界面搭建2.代码编写3.效果演示四、后言一、前言 本博文标题和内容参考:基于原生JS实现H5转盘游戏 博主将改编成Unity版本。 二、效果图 ...
    99+
    2024-04-02
  • Python制作一个随机抽奖小工具的实现
    目录1. 核心功能设计2. GUI设计与实现3. 功能实现3.1 读取人员名单3.2. 随机抽奖3.3. 保存中奖名单3.4. GUI交互逻辑最近在工作中面向社群玩家组织了一场活动,需要进行随机抽奖,参考之前小明大佬...
    99+
    2022-06-02
    Python 随机抽奖小工具 Python 随机抽奖
  • 教你用Python实现一个轮盘抽奖小游戏
    目录一、Python GUI 编程简介二、流行GUI框架总结三、代码演示四、界面一、Python GUI 编程简介 Tkinter 模块(Tk 接口)是 Python 的标准 Tk ...
    99+
    2024-04-02
  • 怎么用CSS实现一个抽奖转盘
    这篇文章主要介绍“怎么用CSS实现一个抽奖转盘”,在日常操作中,相信很多人在怎么用CSS实现一个抽奖转盘问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用CSS实现一个抽奖...
    99+
    2024-04-02
  • 基于Python怎么实现评论区抽奖功能
    这篇文章主要讲解了“基于Python怎么实现评论区抽奖功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Python怎么实现评论区抽奖功能”吧!1. 分析评论接口首先,我们需要找到评论数...
    99+
    2023-06-22
  • 基于Python实现评论区抽奖功能详解
    目录1. 分析评论接口2. 获取评论数据3. 筛选评论用户4. 抽取幸运观众5. 完整源码5.1 字符串截取的方式5.2 正则匹配方式5.3 执行结果1. 分析评论接口 首先,我们需...
    99+
    2024-04-02
  • Vue3+TS+Vite+NaiveUI搭建一个项目骨架实现
    目录 写在前面 创建Vue3项目 开发规范 Vite配置 别名配置环境变量 .env文件 定义环境变量 在vite.config.ts中获取环境变量 自动导入NaiveUI的安装 写...
    99+
    2024-04-02
  • 基于React.js实现兔兔牌九宫格翻牌抽奖组件
    目录基础页面结构初始化数据翻转逻辑count 为 0100% 中奖效果图基础页面结构 import React, { useEffect, useState } from "reac...
    99+
    2023-01-12
    React.js九宫格翻牌抽奖 React.js九宫格 React.js抽奖
  • 如何利用css实现一个抽奖动画效果
    这篇文章将为大家详细讲解有关如何利用css实现一个抽奖动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先我们先来看下最终的运行效果:从效果图我们可以看到,抽奖会自动进行,并显示中奖信息。这个效果基...
    99+
    2023-06-07
  • 使用vue怎么实现一个转盘抽奖功能
    本篇文章为大家展示了使用vue怎么实现一个转盘抽奖功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运...
    99+
    2023-06-07
  • Java练手小项目实现一个项目管理系统
    目录前言:一、项目需求二、功能实现三、具体模块的实现四、总结前言: 时隔多日,我们学习完java的面向对象阶段,毕竟需要付诸实践,这个小项目就 作为我们第一个java面向对象解决的项...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作