vue数字翻盘,翻转效果

news2024/9/24 13:25:06

数字翻转的效果

实现数字翻转的效果上面为出来的样子

下面为代码,使用的时候直接引入,还有就是把图片的路径自己换成自己或者先用颜色替代,传入num和numlength即可

<template>
  <div v-for="(item, index) in processedNums" :key="index" class="filp_box">
    <div
      class="card-container"
      :class="{ entry: flipState[index] }"
      v-if="item == '.'"
    >
      <!-- <div class="line"></div> -->
      <div class="card1 card-item">.</div>
      <div class="card2 card-item">.</div>
      <div class="card3 card-item">.</div>
      <div class="card4 card-item">.</div>
    </div>
    <div class="card-container" :class="{ entry: flipState[index] }" v-else>
      <!-- <div class="line"></div> -->
      <div class="card1 card-item">{{ item }}</div>
      <div class="card2 card-item">{{ item }}</div>
      <div class="card3 card-item">{{ item }}</div>
      <div class="card4 card-item">{{ item }}</div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    nums: {
      validator: function(value) {
      // 判断值是否为数字或者可以转换为数字的字符串
      return !isNaN(value) || typeof value === 'string';
      },
      required: true,
      default: () => 0,
    },
    numlength: {
      type: Number,
      default: 7,
    },
  },
  watch: {
    nums(newVal, oldVal) {
      // 重置所有翻转状态
      this.flipState = this.processedNums.map(() => false);
      let newnum = this.processedNumsWatch(newVal);
      let oldnum = this.processedNumsWatch(oldVal);
      // 使用$nextTick确保DOM已更新后再触发动画
      this.cleanTimer= setTimeout(() => {
        newnum.forEach((item, index) => {
          if (item != oldnum[index]) {
            this.flipState[index] = true;
          }
        });
      }, 50);
    },
    numlength(newVal, oldVal) {
      // 重置所有翻转状态
      this.flipState = this.processedNums.map(() => false);
    },
  },
  data() {
    return {
      flipState: [], // 用于记录每个数字容器的翻转状态
      cleanTimer: null,
    };
  },
  computed: {
    // 计算属性来处理nums,这里简单地假设处理逻辑是添加一个id字段
    processedNums() {
      let string = this.nums.toString();
      // 字符串转数组
      let array = Array.from(string);
      //   数组补0
      let valueArr = this.padArray(array, this.numlength);
      return valueArr;
    },
  },
  methods: {
    // 补0
    padArray(arr, max) {
      while (arr.length < max) {
        arr.unshift("0");
      }
      return arr;
    },
    processedNumsWatch(val) {
      let string = val.toString();
      // 字符串转数组
      let array = Array.from(string);
      //   数组补0
      let valueArr = this.padArray(array, this.numlength);
      return valueArr;
    },
  },
  beforeDestroy() {
    clearTimeout(this.cleanTimer);
  },
};
</script>
<style scoped>
.filp_box {
  display: inline-block;
  margin: 0 1px;
}
.card-container {
  width: 27px;
  height: 40px;
  /* backg
  round: #000000; */
  position: relative;
}
.line {
  position: absolute;
  z-index: 100;
  width: 100%;
  background-color: #fff;
  height: 3px;
  top: 49%;
}
.card-item {
  position: absolute;
  width: 100%;
  height: 50%;
  overflow: hidden;
}

.card1 {
  font-size: 36px;
  font-family: "myFontNum";
  font-weight: bold;
  line-height: 40px;
  text-align: center;
  color: #fff;
  background: url("./TTTT5.png") no-repeat center;
}

.card2 {
  font-size: 36px;
  font-family: "myFontNum";
  font-weight: bold;
  line-height: 0px;
  color: #fff;
  text-align: center;
  top: 50%;
  background: url("./BBBBBFD.png") no-repeat center;
  transform-origin: center top;
  backface-visibility: hidden;
  transform: rotateX(180deg);
  z-index: 2;
}

.card3 {
  font-size: 36px;
  font-family: "myFontNum";
  font-weight: bold;
  color: #fff;
  line-height: 40px;
  text-align: center;
  background: url("./TTTT5.png") no-repeat center;
  transform-origin: center bottom;
  backface-visibility: hidden;
  z-index: 2;
}

.card4 {
  font-size: 36px;
  font-family: "myFontNum";
  font-weight: bold;
  color: #fff;
  top: 50%;
  line-height: 0px;
  text-align: center;
  /* overflow: hidden; */
  background: url("./BBBBBFD.png") no-repeat center;
}

.card-container.entry .card2 {
  transition: 0.5s;
  transform: rotateX(0deg);
}

.card-container.entry .card3 {
  transition: 0.5s;
  transform: rotateX(-180deg);
}
</style>

使用示例

 <FlipCard :nums="propsnum" :numlength="7" />

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

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

相关文章

电脑怎么恢复刚删除的文件?别急,教你几招

在日常使用电脑的过程中&#xff0c;误删文件的情况时有发生。无论是由于操作失误还是病毒攻击&#xff0c;文件丢失都可能给我们的工作和生活带来不小的困扰。然而&#xff0c;不必过于焦虑&#xff0c;因为在大多数情况下&#xff0c;我们仍然有机会恢复这些丢失的文件。下面…

Linux--构建进程池

目录 1.进程池 1.1.我们先完成第一步&#xff0c;创建子进程和信道 1.2. 通过channel控制&#xff0c;发送任务 1.3回收管道和子进程 1.4进行测试 1.5完整代码 1.进程池 进程池其产生原因主要是为了优化大量任务需要多进程完成时频繁创建和删除进程所带来的资源消耗&#…

windows 执行node报错 800A1391

在项目下执行node -v的时候&#xff0c;抛了这个错误&#xff0c;一开始没发现有啥问题 现在一看&#xff0c;这个报错里的node怎么是个文件... 出现这个问题&#xff0c;是因为项目下&#xff0c;有个同名的文件叫node.js&#xff0c;搞得windows一时不知道是想打开node.js文…

gem5模拟器入门(一)——环境配置

什么是gem5&#xff1f; gem5是一个模块化的离散事件驱动的计算机系统模拟器平台。这意味着&#xff1a; GEM5 的组件可以轻松重新排列、参数化、扩展或更换&#xff0c;以满足您的需求。它将时间的流逝模拟为一系列离散事件。它的预期用途是以各种方式模拟一个或多个计算机系…

数码论坛|基于SprinBoot+vue的数码论坛系统(源码+数据库+文档)

数码论坛系统 目录 基于SprinBootvue的数码论坛系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2 管理员功能模块 3 用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&am…

STM32-11-电容触摸按键

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32电容触摸按键 电容触摸按键原理&#xff1a; 无手指触摸&#xff1a;上电时&…

DSP开发入门

视频&#xff1a; 创龙TI 最新DSP CPU核心架构 C66x 以及 KeyStone I 架构 DSP TMS320C6655/57以及TMS320C6678视频教程全集_哔哩哔哩_bilibili 2024年硬汉科技手把手教您学DSP28335视频教程持续更新中_哔哩哔哩_bilibili DSP芯片介绍 DSP选型 TI的DSP 分为三大系列&#…

基于Android的家庭理财APP的设计与实现(论文+源码)_kaic

摘 要 随着我国居民收入和生活水平的提高&#xff0c;家庭理财成为人们热议的焦点问题。在需求分析阶段&#xff0c;系统从用户的实际需求出发&#xff0c;确定了用户账户管理、记账、数据分析和提醒功能等几个核心需求。用户账户管理包括用户注册、登录和密码找回等基本操作…

游戏私域运营指南 | 降低买量成本,精细化游戏私域运营看这篇就懂了!

私域是什么&#xff1f;这个概念在零售行业已经盛行多年&#xff0c;但在游戏行业提及得并不多&#xff0c;从业者们可能更熟悉的 近似概念是“社区运营”。 那么首先&#xff0c;让我们明确定义&#xff1a;相对于社交媒体、搜索引擎、电商平台等需要通过付费投放来进行高效流…

webshell工具-冰蝎流量特征和加密方式

一、冰蝎原理 1.1 简介 冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端&#xff0c;由于通信流量被加密&#xff0c;传统的WAF、IDS 设备难以检测&#xff0c;给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密&#xff0c;且加密密钥是由随…

【前端常见面试题整理】

开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径&#xff0c;一个是查阅官方文档&#xff0c;然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github&#xff0c;同时关注一些社区和IT网…

浅说线性DP(上)

前言 在说线性dp之前&#xff0c;我们先来聊一聊动态规划是啥&#xff1f; 动态规划到底是啥&#xff1f; 动态规划是普及组内容中最难的一个部分&#xff0c;也是每年几乎必考的内容。它对思维的要求极高&#xff0c;它和图论、数据结构不同的地方在于它没有一个标准的数学…

Rust最新版安装(v1.78.0+)

系统&#xff1a;Windows 11 专业版 23H2rustc&#xff1a;1.78.0 配置环境变量和设置配置文件 新建文件夹“C:\Rust\Rustup”和“C:\Rust\Cargo”。【以管理员身份运行】打开CMD 设置系统环境变量&#xff0c;如下设置RUSTUP_DIST_SERVER&#xff0c;其余同理 C:\Windows\S…

中国教育 AI 产品正在成为百万美国学生的辅导老师;李飞飞:大模型不存在主观感觉能力丨 RTE 开发者日报 Vol.213

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

编程5年的老哥说:我代码里从来不用锁,谁爱...

技多不压身&#xff01; 大家好&#xff0c;我是 javapub。 今天一个朋友找我吐槽&#xff0c;说自己平时在工作中几乎用不到需要上锁的场景&#xff0c;就算有也只是并发很小、或者直接从有业务设计上就规避掉了。但一到面试&#xff0c;都是各种锁题&#xff0c;很头疼。 面…

YYDS!哈工大博士PyTorch笔记火了!!

Pytorch是目前常用的深度学习框架之一&#xff0c;它凭借着对初学者的友好性、灵活性&#xff0c;发展迅猛&#xff0c;它深受学生党的喜爱&#xff0c;我本人也是使用的Pytorch框架。 比起 TF 的框架环境配置不兼容&#xff0c;和 Keras 由于高度封装造成的不灵活&#xff0c…

三、Ollama导入大模型(.Net8+SemanticKernel+Ollama)本地运行自己的大模型

Ollama导入大模型 一、导入Ollama大模型1、使用run命令2、使用Modelfile方式 二、导入自定义大模型&#xff08;Ollama官网以外的大模型&#xff09;三、使用OpenWebUI导入大模型 Ollama可以导入官方提供的大模型&#xff0c;也可以导入huggingface上的自定义大模型&#xff08…

以太坊现货ETF获批:引发ETH价格暴涨,市场热议达到高潮

2024年5月24日&#xff0c;北京时间&#xff0c;以太坊现货ETF正式获得美国证券交易委员会&#xff08;SEC&#xff09;的批准&#xff0c;成为继比特币之后&#xff0c;美国主权政府承认的又一加密货币基金产品。这一意外的利好消息引发了加密货币市场的狂欢&#xff0c;以太坊…

东软的第三个研发基地,为什么选择了武汉?

继沈阳、大连之后&#xff0c;东软集团在国内打造的第三个研发基地——武汉东软软件园&#xff0c;于2024年5月25日正式开园。 “占地面积158亩、建筑面积14万余平方米的武汉东软软件园&#xff0c;从开工到竣工仅仅用了18个月的时间。这样的建设速度&#xff0c;充分体现了武汉…

香橙派Kunpeng Pro性能测评:高效能小型服务器开发板的全面体验

香橙派 Kunpeng Pro 是一款面向开发者和教育市场的高性能单板计算机&#xff0c;其搭载了鲲鹏处理器&#xff0c;可提供 8TOPS INT8 计算能力&#xff0c;提供了 8GB 和 16GB 两种内存版本&#xff0c;开发板结合了鲲鹏全栈根技术&#xff0c;全面使能高校计算机系统教学和原生…