Vue3模拟国足18强赛抽签

news2024/12/24 21:22:40

Vue3国足18强赛抽签

国足遇到这个对阵,能顺利出现吗?
在这里插入图片描述

1、系统演示

Vue3模拟国足18强赛抽签

2、关键代码
  • 开始抽签
<script setup>
import FenDang from "@/components/chouqian/FenDang.vue";
import {ref} from "vue";

let isShowFenDang = ref(false)
function showFenDang(){
  isShowFenDang.value = true;
}

</script>

<template>
  <div class="flex-container">
    <h2>2024年世界杯预选赛亚洲区抽签仪式</h2>
    <img src="@/assets/fendang.png" alt="Logo" class="logo">
    <button class="start-button" @click="showFenDang">开始抽签</button>
    <FenDang v-if="isShowFenDang"/>
  </div>
</template>

<style scoped>
.flex-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center; 
}

.logo {
  width: 600px;
}

.start-button {
  /* 根据需要设置合适的宽度和高度 */
  width: 100px; 
  height: 40px; 
  background-color: #4CAF50;
  border: none;
  color: white; 
  padding: 10px 20px;
  text-align: center; 
  text-decoration: none;
  font-size: 14px; 
  margin: 4px 2px;
  cursor: pointer; 
  border-radius: 8px; 
  transition: background-color 0.3s; 
}

.start-button:hover {
  background-color: #45a049;
}
</style>
  • 抽签结果
<template>
  <div class="group-container">
    <div v-for="(groupImages, groupName) in dynamicGroups" :key="groupName" class="group-item">
      <h2>{{ groupName }}</h2>
      <div class="image-grid">
        <div v-for="(image, index) in groupImages" :key="index" class="image-item">
          <img :src="image" :alt="`Image ${index + 1}`">
        </div>
      </div>
    </div>
    <!-- 添加闪烁图片区域 -->
    <div class="flashing-area">
      <h5 :class="tips==='抽签中...'?'tips-process-color':'tips-done-color'">{{tips}}</h5>
      <transition name="fade">
        <img v-if="flashImages.length > 0" :src="flashImages[0]" alt="Flashing Image" />
      </transition>
    </div>
  </div>
</template>

<script setup>
import {ref, onMounted, nextTick, onUnmounted} from 'vue';

const images = ref({
  level1: ['/level1/image1.png', '/level1/image2.png', '/level1/image3.png'],
  level2: ['/level2/image1.png', '/level2/image2.png', '/level2/image3.png'],
  level3: ['/level3/image1.png', '/level3/image2.png', '/level3/image3.png'],
  level4: ['/level4/image1.png', '/level4/image2.png', '/level4/image3.png'],
  level5: ['/level5/image1.png', '/level5/image2.png', '/level5/image3.png'],
  level6: ['/level6/image1.png', '/level6/image2.png', '/level6/image3.png']
});

const dynamicGroups = ref({
  'A组': [],
  'B组': [],
  'C组': []
});

const currentLevel = ref('level1');
const currentGroupIndex = ref(0);
const flashImages = ref([]);
const selectedImages = ref([]);
let flashTimer = null;
let tips = ref("抽签中...");

const selectAndFlashImage = () => {
  const levelImagesCopy = [...images.value[currentLevel.value]];
  let flashIndex = 0;
  let flashSpeed = 50; // 初始闪烁速度,单位:毫秒
  let randomIndex = Math.floor(Math.random() * levelImagesCopy.length);
  let startTime = Date.now(); // 记录开始时间


  const adjustFlashSpeed = () => {
    if (Date.now() - startTime < 1800) {
      // 在前1.8秒内,根据时间线性增加闪烁速度
      flashSpeed += 5;
    } else {
      // 在最后0.2秒内,指数级增加闪烁速度
      flashSpeed = Math.min(flashSpeed * 1.5, 200);
    }
  };

  const flashTimer = setInterval(() => {
    adjustFlashSpeed();
    if (Date.now() - startTime < 1000) {
      flashImages.value = [levelImagesCopy[flashIndex]];
      flashIndex = (flashIndex + 1) % levelImagesCopy.length;
    } else {
      clearInterval(flashTimer);
      const finalImage = levelImagesCopy[randomIndex];
      flashImages.value = [finalImage]; // 设置为最终图片

      // 增加延时,让图片停留更长时间
      setTimeout(() => {
        dynamicGroups.value[Object.keys(dynamicGroups.value)[currentGroupIndex.value]].push(finalImage);
        selectedImages.value.push(finalImage);
        images.value[currentLevel.value] = images.value[currentLevel.value].filter((_, i) => i !== randomIndex);

        if (selectedImages.value.length < 18) {
          nextLevel();
        }else{
          tips.value="抽签结束,祝中国队好运";
        }
      }, 1000); // 延时2000毫秒
    }
  }, flashSpeed);
};

const nextLevel = () => {
  if (selectedImages.value.length % 6 === 0 && selectedImages.value.length < 18) {
    currentGroupIndex.value = (currentGroupIndex.value + 1) % Object.keys(dynamicGroups.value).length;
  }

  const levels = Object.keys(images.value);
  const currentIndex = levels.indexOf(currentLevel.value);
  currentLevel.value = levels[(currentIndex + 1) % levels.length];

  if (selectedImages.value.length < 18) {
    selectAndFlashImage();
  }
};

onMounted(() => {
  selectAndFlashImage();
});

</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将编译过的C++库迅速部署在Visual Studio新项目中

本文介绍在Visual Studio中&#xff0c;通过属性表&#xff0c;使得一个新建解决方案中的项目可以快速配置已有解决方案的项目中各类已编译好的C第三方库的方法。 例如&#xff0c;我们现有一个解决方案&#xff0c;其中的一个项目需要调用Armadillo、OpenCV等多个不同的C第三…

一文详解:什么是小程序SDK?

什么是小程序SDK&#xff1f; 首先来看看概念&#xff1a;小程序SDK&#xff08;Software Development Kit&#xff09;是用于开发和扩展小程序的工具集合。可以理解为一套工具箱&#xff0c;专门帮助开发者建立和定制小程序应用程序。这些工具包括了开发小程序所需的各种代码…

【Android面试八股文】谈一谈你对http和https的关系理解

文章目录 HTTPHTTPSSSL/TLS协议HTTPS加密、解密流程HTTP 和 HTTPS 的关系具体的差异实际应用总结扩展阅读HTTP(HyperText Transfer Protocol)和HTTPS(HyperText Transfer Protocol Secure)是用于在网络上进行通信的两种协议。 它们在很多方面是相似的,但关键的区别在于安全…

前端传进来的单选值是0,到了后端加了个逗号

如上图所示&#xff0c;标记的var的值org和id的值orgOrNot不能一样&#xff0c;如果一样&#xff0c;通过id获取&#xff08;#(“#orgOrNot”).find(“option:selected”).val()&#xff09;时候就会出现这种情况 改成如下情况&#xff0c;区别开id

ubuntu下同时安装和使用不同版本的库 librealsense

apt 安装的最新版本在/usr 源码安装的旧版本在/usr/local set(realsense2_DIR /usr/local/) find_package(realsense2 2.50.0 REQUIRED) message( "\n\n ${realsense2_INCLUDE_DIR} ${realsense2_VERSION} RealSense SDK 2.0 is FINDINGING, please install it from…

vivado PKGPIN_NIBBLE

描述 PKGPIN_NIBBLE是PKGPIN_BYTEGROUP的一部分。参见PKGPIN_BYTEGROUP&#xff0c; 第122页了解该对象的描述。 相关对象 PKGPIN_BYTEGROUP和PKGPIN_NIBBLE与IO_BANK、PACKAGE_PIN和 PORT&#xff0c;如前所述。此外&#xff0c;每个PKGPIN_NIBBLE都与 Xilinx设备。您可以使用…

The First项目报告:深度解读Layer 2生态zkSync

zkSync发币了&#xff0c;这个无数撸毛党心心念念数年之久的项目终于要来了&#xff0c;zkSync 是由Matter Labs 于2019 年推出的以太坊Layer 2 扩容解决方案&#xff0c;作为L2龙头项目之一&#xff0c;与其同属一个层次的L2四大天王之三Optimism、Arbitrum、zkSync、StarkNet…

RoaringBitMap处理海量数据内存diff

一、背景 假设mysql库中有一张近千万的客户信息表(未分表)&#xff0c;其中有客户性别&#xff0c;等级(10个等级)&#xff0c;参与某某活动等字段 1、如果要通过等级性别其他条件(离散度也低)筛选出客户&#xff0c;如何处理查询&#xff1f; 2、参与活动是记录活动ID&#…

科凡定制首倡轻高定突围的蓝海战术是明星代言?

4月19日&#xff0c;科凡家居再度重磅发声&#xff0c;正式宣布国际女星舒淇为全球代言人。 纵观定制家居几大一线品牌&#xff0c;欧派代言人胡歌&#xff0c;索菲亚代言人倪妮。尚品宅配代言人赵丽颖&#xff0c;维意定制代言人黄轩&#xff0c;志邦家居代言人周杰伦......大…

31.加载配置文件中的游戏到辅助列表

上一个内容&#xff1a;30.保存游戏配置到文件 以 30.保存游戏配置到文件 它的代码为基础进行修改 效果图&#xff1a; 加载配置文件到列表的函数&#xff1a; void CWndINJ::LoadGame() {int count GetPrivateProfileInt(L"main", L"count", 0, GameI…

sourceTree 解决remote: HTTP Basic: Access denied报错mac

解决sourceTree中remote: HTTP Basic: Access denied报错 mac sourcetree报错报错原因解决方案 mac sourcetree报错 warning: invalid credential line: xxx.com remote: HTTP Basic: Access denied fatal参考链接&#xff1a;https://developer.aliyun.com/article/1304149 …

经典文献阅读之--OrienterNet(自动驾驶中基于网格的交通场景感知)

dia 0. 简介 使用神经网络来匹配2D公开地图的做法是一个很有趣的方法&#xff0c;人们可以使用简单的2D地图在3D环境中指明自己所处的位置&#xff0c;而大部分视觉定位算法则依赖于昂贵的、难以构建和维护的3D点云地图。为了弥合这一差距《OrienterNet: Visual Localization…

全球首个开源类Sora模型大升级,16秒720p画质电影感爆棚!代码和权重全面开源!

目录 01 视频界开源战士 02 深度解码技术 03 打破闭环&#xff0c;开源赋能 潞晨Open-Sora团队刚刚在720p高清文生视频质量和生成时长上实现了突破性进展&#xff01; 全新升级的Open-Sora不仅支持无缝生成任意风格的高质量短片&#xff0c;更令人惊喜的是&#xff0c;团队选…

关于办公软件的使用

第一部分&#xff1a; 常用函数的使用 在使用的地方&#xff0c;输入SUM(B2:F2)回车 第二部分&#xff1a; 自定义函数的使用 1、打开 宏编辑 2、 自定义函数方法 3、自定义函数的使用和常用函数一样&#xff1a; 在使用的地方&#xff0c;输入计算面积(A3&#xff0c;B3)…

算法设计与分析期末复习题

一&#xff1a;程序阅读分析题&#xff08;共40分&#xff09; 1.&#xff08;8分&#xff09;阅读“算法1”&#xff0c;分析算法1的功能、时间复杂度。 答案&#xff1a;经典的汉诺塔问题&#xff0c;其目标是将 n 个不同大小的盘子从柱子 A 移动到柱子 C&#xff0c;借助柱…

PDM 测试

文章目录 硬件拓扑AP 生成 PDM输出数据路径AP 输入时域数据频域数据逻辑分析与抓包硬件拓扑 如果使用 AP 需要注意公地 AP 生成 PDM输出 AP 的 output 选择 PDM,MCU 提供 Bit clock,AP 生成 PDM 数据,AP 配置如下 数据路径 AP sin data -> PDM -> codec -> RA…

Git的下载安装及可视化工具小乌龟

一、 Git 的下载 第1步&#xff1a;下载Git&#xff0c;下载地址&#xff1a;Git for Windows 这个就需要去 Git 官网下载对应系统的软件了&#xff0c;下载地址为 git-scm.com或者gitforwindows.org&#xff0c;或者阿里镜像&#xff08;感谢评论区的星悸迷航同学&#…

el-pagination分页组件导致发送两次请求

场景 有一个搜索框&#xff0c;搜索显示表格内容&#xff0c;下面有分页组件&#xff0c;大概长这样&#xff1a; 当分页组件选择到别的页数&#xff08;非第一页&#xff09;&#xff0c;再进行查询&#xff0c;查询的内容会显示在第一页&#xff0c;此时会发送两次网络请求。…

TIA Portal 博途 集成自动化软件下载安装,TIA Portal 轻松驾驭复杂工业设备

在博途TIA Portal的全方位赋能下&#xff0c;用户可以轻松驾驭复杂的工业设备&#xff0c;实现设备的精准配置、高效编程、便捷调试和实时监控。 在配置方面&#xff0c;博途TIA Portal以其强大的配置功能&#xff0c;帮助用户快速定义设备的各项参数&#xff0c;使设备能够快速…

洛谷 P3379:最近公共祖先(LCA)← RMQ+欧拉序

【题目来源】https://www.luogu.com.cn/problem/P3379【题目描述】 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。【输入格式】 第一行包含三个正整数 N,M,S&#xff0c;分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−…