亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于vue3實(shí)現(xiàn)一個(gè)抽獎(jiǎng)小項(xiàng)目

 更新時(shí)間:2023年01月23日 09:27:38   作者:曦12  
在公司年會(huì)期間我做了個(gè)抽獎(jiǎng)小項(xiàng)目,非常棒,今天把他分享到腳本之家平臺(tái),供大家學(xué)習(xí)參考,對(duì)vue3實(shí)現(xiàn)抽獎(jiǎng)小項(xiàng)目感興趣的朋友一起看看吧

前言

實(shí)現(xiàn)目標(biāo)數(shù)據(jù)保存:無(wú)后端,純前端實(shí)現(xiàn),瀏覽器刷新或者關(guān)閉數(shù)據(jù)不能丟失。姓名切換:點(diǎn)擊中部開始按鈕姓名快速切換。獎(jiǎng)項(xiàng)切換:獎(jiǎng)項(xiàng)為操作人員手動(dòng)切換設(shè)置。歷史記錄:抽獎(jiǎng)完成后需要有歷史記錄。數(shù)據(jù)導(dǎo)入:允許參與人員的表格導(dǎo)入。

數(shù)據(jù)保存

無(wú)后臺(tái),純前端實(shí)現(xiàn)而且需要刷新關(guān)閉瀏覽器數(shù)據(jù)不丟失,很容易便會(huì)想到使用localStorage,localStorage存入的數(shù)據(jù)具有持久性,不會(huì)因?yàn)樗⑿禄蜿P(guān)閉瀏覽器而變化(除非手動(dòng)刻意的清除),有別于sessionstorage,localStorage的生命周期是永久,sessionstorage是瀏覽器或者標(biāo)簽頁(yè)關(guān)閉。

因?yàn)榇嫒氲臄?shù)據(jù)不是單純的字符串,而是具有結(jié)構(gòu)性的對(duì)象數(shù)組,所以需要配合JSON.stringify與JSON.parse來(lái)使用。這是存入數(shù)據(jù)的方法:

localStorage.setItem("luckDrawHis", JSON.stringify(luckDrawHis));//JSON.stringify將json轉(zhuǎn)換為字符串

這是讀取數(shù)據(jù)的方法:

JSON.parse(localStorage.getItem("luckDrawHis"))//JSON.parse將字符串轉(zhuǎn)換為json

姓名切換

抽獎(jiǎng)的方式是數(shù)據(jù)導(dǎo)入后,點(diǎn)擊中間的圓形開始按鈕,姓名便開始快速切換,再次點(diǎn)擊按鈕便停止姓名切換,彈出對(duì)話框顯示當(dāng)前姓名以及設(shè)置的獎(jiǎng)項(xiàng)。

切換姓名利用了vue的數(shù)據(jù)響應(yīng)式原理。先獲取到所有的參與人員數(shù)據(jù),然后亂序處理,最后循環(huán)展示,我這里每個(gè)姓名展示的時(shí)間為50毫秒,你也可以自己設(shè)置。這里的數(shù)組亂序我使用了洗牌算法,其實(shí)就是利用Math.random獲取數(shù)組的隨機(jī)下標(biāo),然后與最后一個(gè)元素進(jìn)行位置交換。

//洗牌算法(亂序數(shù)組)
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;
}
 
//循環(huán)列表
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));//數(shù)組耗盡循環(huán)
      }
    }, 50 * i);
  }
}

獎(jiǎng)項(xiàng)切換

獎(jiǎng)項(xiàng)切換直接使用elementPlus的單選框即可。

歷史記錄

每次點(diǎn)擊抽獎(jiǎng)出現(xiàn)結(jié)果時(shí),將之前的抽獎(jiǎng)結(jié)果取出來(lái),然后把當(dāng)前的結(jié)果添加到末尾。

點(diǎn)擊抽獎(jiǎng)歷史按鈕時(shí)再將所有歷史數(shù)據(jù)取出來(lái)。

數(shù)據(jù)導(dǎo)入

由于需要導(dǎo)入人員表格數(shù)據(jù),這里我使用了xlsx插件與file-saver插件來(lái)實(shí)現(xiàn)。

首先是下載模板。

將事先準(zhǔn)備好的表格模板放在項(xiàng)目的public目錄下。

點(diǎn)擊下載模板按鈕時(shí)直接調(diào)用以下方法即可,其中的saveAs是file-saver插件中的方法,傳入路徑與文件名即可。

import { saveAs } from 'file-saver';
//下載模板
function downTemp() {
    let fileName = "人員模板.xlsx";//文件名
    let fileUrl = "./template/";//文件路徑(路徑相對(duì)index.html)
    saveAs(fileUrl + fileName, fileName);
}

表格處理好,

點(diǎn)擊導(dǎo)入按鈕讀取表格數(shù)據(jù)時(shí)使用的是xlsx插件,下面是讀取數(shù)據(jù)的方法。

import * as XLSX from "xlsx";
//導(dǎo)入數(shù)據(jù)
function importData(e) {
    isLoading.value = true;
    let file = e.target.files[0]; //獲取事件中的file對(duì)象
    let fileReader = new FileReader(); //創(chuàng)建文件讀取器
    fileReader.onload = (event) => {
        let result = event.target.result; //獲取讀取的結(jié)果
        let workBook = XLSX.read(result, { type: "binary" }); //XLSX讀取返回的結(jié)果
        let jsonData = XLSX.utils.sheet_to_json(
            workBook.Sheets[workBook.SheetNames[0]]
        ); //將讀取結(jié)果轉(zhuǎn)換為json
        tabData.value = [];
        jsonData.forEach((j) => {
            tabData.value.push({
                name: j.姓名,
                age: j.性別,
                department: j.部門,
            });
        }); //處理成需要的數(shù)據(jù)格式
        localStorage.setItem("tabData", JSON.stringify(tabData.value));//數(shù)據(jù)存入本地
        tabDataS.value = JSON.parse(localStorage.getItem("tabData"));//取出數(shù)據(jù)
        emits("getNameList", tabData);
        isLoading.value = false;
    };
    fileReader.readAsBinaryString(file); //開始讀取文件
    ((document.getElementsByClassName("inp-xlsx")[0]).value = ""); //置空選中的文件
};

結(jié)語(yǔ)

  • 項(xiàng)目很簡(jiǎn)單,但給我的時(shí)間很少,很多優(yōu)化的地方都沒(méi)做好,后面有時(shí)間了再優(yōu)化下,順便適配下移動(dòng)端。
  • 原文地址:https://xiblogs.top/?id=53

到此這篇關(guān)于基于vue3實(shí)現(xiàn)一個(gè)抽獎(jiǎng)小項(xiàng)目的文章就介紹到這了,更多相關(guān)vue3抽獎(jiǎng)項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中實(shí)現(xiàn)可編輯table及其中加入下拉選項(xiàng)

    vue中實(shí)現(xiàn)可編輯table及其中加入下拉選項(xiàng)

    這篇文章主要介紹了vue中實(shí)現(xiàn)可編輯table及其中加入下拉選項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 基于Vue實(shí)現(xiàn)微前端的示例代碼

    基于Vue實(shí)現(xiàn)微前端的示例代碼

    這篇文章主要介紹了基于Vue實(shí)現(xiàn)微前端的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • vue雙向綁定及觀察者模式詳解

    vue雙向綁定及觀察者模式詳解

    這篇文章主要介紹了vue雙向綁定及觀察者模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue如何使用HMAC-SHA256簽名算法

    vue如何使用HMAC-SHA256簽名算法

    這篇文章主要介紹了vue使用HMAC-SHA256簽名算法的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 淺談VUE項(xiàng)目打包后運(yùn)行頁(yè)面一片白問(wèn)題

    淺談VUE項(xiàng)目打包后運(yùn)行頁(yè)面一片白問(wèn)題

    本文主要介紹了淺談VUE項(xiàng)目打包后運(yùn)行頁(yè)面一片白問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-01-01
  • Vue3中插槽(slot)用法匯總(推薦)

    Vue3中插槽(slot)用法匯總(推薦)

    這篇文章主要介紹了Vue3中插槽(slot)用法匯總,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • vue項(xiàng)目中main.js的用法

    vue項(xiàng)目中main.js的用法

    src/main.js是入口文件,主要作用是初始化vue實(shí)例并使用需要的插件, Vue.use()的作用就是讓它里面被注冊(cè)的組件能夠被全局使用,本文通過(guò)實(shí)例代碼介紹vue項(xiàng)目中main.js的用法,感興趣的朋友一起看看吧
    2023-10-10
  • vue 取出v-for循環(huán)中的index值實(shí)例

    vue 取出v-for循環(huán)中的index值實(shí)例

    今天小編就為大家分享一篇vue 取出v-for循環(huán)中的index值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 一起來(lái)看看Vue的核心原理剖析

    一起來(lái)看看Vue的核心原理剖析

    這篇文章主要為大家詳細(xì)介紹了Vue的核心原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • vue輸入框組件開發(fā)過(guò)程詳解

    vue輸入框組件開發(fā)過(guò)程詳解

    這篇文章主要為大家詳細(xì)介紹了vue輸入框組件開發(fā)過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論