vue数字翻盘,翻转效果

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

下面为代码,使用的时候直接引入,还有就是把图片的路径自己换成自己或者先用颜色替代,传入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" />

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql-索引、存储引擎、事务、锁机制和优化

1. MySQL的索引 1.1 概述 索引是通过某种算法&#xff0c;构建出一个数据模型&#xff0c;用于快速找出在某个列中有以特定值的行&#xff0c;不使用索引&#xff0c;MySQL必须从一条记录开始读完整个表&#xff0c;直到找出相关的行&#xff0c;表越大查询数据所花的时间越多…

vue3 使用vant

使用前提&#xff1a; vite创建的vue3项目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入样式&#xff1a; main.js import vant/lib/index.css vant封装 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…

OWASP top10--SQL注入(三、手工注入)

目录 access数据库 手工注入过程&#xff1a; 猜解数据库表名 猜解数据库表名里面的字段 猜解字段内容 SQL注入中的高级查询 mssql数据库 手工注入过程&#xff1a; sa权限 ​编辑dbowner权限 public权限 mysql数据库 1、对服务器文件进行读写操作(前提条件) 需要知…

安全阀检测要求标准:如何提高检测效率与准确性?

安全阀&#xff0c;作为承压设备的重要保护元件&#xff0c;其性能的稳定性和可靠性直接关系到设备的运行安全。 因此&#xff0c;对安全阀进行定期、规范的检测显得尤为重要。接下来&#xff0c;佰德将围绕安全阀的检测要求标准&#xff0c;从检测前准备工作到检测报告与记录…

第十二周 5.21面向对象的三大特性(封装、继承、多态)(二)

三、多态 1.理解: (1)多态:父类型的引用存储不同子类型的对象 父类类名 引用名 new 子类类名(); 引用 对象 父类型 子类型 …

创新融合,5G+工业操作系统引领未来工厂

为加速企业完成生产制造自动化和经营管理自动化&#xff0c;从而走向未来工厂&#xff0c;蓝卓不断探索supOS工业操作系统与前沿技术的的创新融合&#xff0c;而5G技术为工业操作系统提供了更多元化的赋能手段和想象空间。目前&#xff0c;supOS围绕生产、安全、质检、监控等领…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字&#xff0c;数字之间依靠逗号隔开&#xff0c;你能帮助他将这些数字存储在列表中吗&#xff0c;列表元素以int的形式。 输入描述&#xff1a; 输入一行整数&#xff0c;数字之间以空格间隔。 输出描述&#xff1a; 输出这些数字…

LuatOS学习

开发顺序 Lua是脚本语言中运行速度最快的语言 资源占用极低 脚本语言运行方式 脚本语言是从上往下一行一行运行的 变量 coun 123456 a,b,c 1,2,3交换 a,b b,a在测试环境中&#xff0c;用print(a,b)打印 nil类型 未声明的变量就是nil&#xff0c;nil用来表示此变量为空…

adb 启动app并查看启动时间

启动app adb shell am start -n 包名/界面名 获取app的启动时长 adb shell am start -W 包名/界面名 要启动一个app 就需要知道其包名与界面名,提前打开一个程序&#xff0c;然后执行以下程序 C:\Users\i5ba0>adb shell dumpsys window windows | findstr mFocusedAppm…

2024年6月PMP考试考前冲刺攻略

调整心态 考场就像战场一样&#xff0c;不仅是实力的较量&#xff0c;更是心理素质的较量。如果感到过于焦虑&#xff0c;可以通过运动等方式来缓解&#xff0c;也可以多与家人、朋友和老师沟通。只有稳定心态才能发挥出最大的实力&#xff01; 高效学习方法 课本是基础&…

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据

样式 在趋势图中点击某一个柱状图&#xff0c;出现下面的弹窗 代码实现 主要是在趋势图页面代码中&#xff0c;在初始化趋势图的设置中&#xff0c;添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…

详析河南道路与桥梁乙级资质新办条件

河南道路与桥梁乙级资质新办条件详析如下&#xff1a; 一、企业基本条件 独立企业法人资格&#xff1a; 申请人必须是具有独立企业法人资格的单位。注册资金&#xff1a; 企业的注册资金应不少于100万元人民币。社会信誉&#xff1a; 申请人应具有良好的社会信誉&#xff0c;无…

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;上电时&…

IC开发——VCS基本用法

1. 简介 VCS是编译型verilog仿真器&#xff0c;处理verilog的源码过程如下&#xff1a; VCS先将verilog/systemverilog文件转化为C文件&#xff0c;在linux下编译链接生成可执行文件&#xff0c;在linux下运行simv即可得到仿真结果。 VCS使用步骤&#xff0c;先编译verilog源…

claude3国内API接口对接

众所周知&#xff0c;由于地理位置原因&#xff0c;Claude3不对国内开放&#xff0c;而国内的镜像网站使用又贵的离谱&#xff01; 因此&#xff0c;团队萌生了一个想法&#xff1a;为什么不创建一个一站式的平台&#xff0c;让用户能够通过单一的接口与多个模型交流呢&#x…

sed命令详解

简介 sed&#xff08;Stream EDitor&#xff09;&#xff0c;是一种流文件编辑器&#xff0c;其特点为&#xff1a; 1、非交互式。处理文件时&#xff0c;把当前处理的行存储在临时缓冲区&#xff08;称为“模式空间”&#xff08;Pattern Space&#xff09;&#xff09;中&am…

【JavaEE精炼宝库】多线程(3)线程安全 | synchronized

目录 一、线程安全 1.1 经典线程不安全案例&#xff1a; 1.2 线程安全的概念&#xff1a; 1.3 线程不安全的原因&#xff1a; 1.3.1 案例刨析: 1.3.2 线程不安全的名词解释&#xff1a; 1.3.3 Java 内存模型 (JMM)&#xff1a; 1.3.4 解决线程不安全问题&#xff1a; 二…

成都爱尔眼科巫雷院长教你在家“自查”白内障

检查以下自己&#xff08;或者父母、亲属&#xff09;是否有发生以下情况&#xff1a; 视物模糊视物模糊是白内障的主要症状。2、眼前暗影白内障早期&#xff0c;有的患者眼前会出现阴影&#xff0c;这是因为晶状体发生浑浊。晶状体混浊在眼前固定位置&#xff0c;患者会“看到…

重生之 SpringBoot3 入门保姆级学习(02、打包部署)

重生之 SpringBoot3 入门保姆级学习&#xff08;02、打包部署&#xff09; 1.6 打包插件1.7 测试 jar 包1.8 application.properties 的相关配置 1.6 打包插件 官网链接 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-starte…

Android15 Beta更新速览

Android15 Beta更新速览 前台服务变更 前台服务使应用保持活动状态&#xff0c;以便它们可以执行关键且对用户可见的操作&#xff0c;通常以牺牲电池寿命为代价。在 Android 15 Beta 2 中&#xff0c;dataSync 和 mediaProcessing 前台服务类型现在具有约 6 小时的超时时间&a…