Vue3中如何实现数字翻牌效果?

一、需求

监听数据的变化,实现数字翻牌效果

本人OS:本想截一个gif,但是一直没找到合适的截gif工具......有好用的截gif工具,跪求戳戳我~

二、思路

1.设置初始数组:[0]

2. 把获取到的新数据整个数字用逗号隔开,组成一个新的数组

3.数组中的每一个数字都是在0~9之间移动展示,数字位移的通用公式:

transform: translate(-50%,-${number * 10}%)

4.监听数据的变化,当数据变化时,获取每个数字对应的ref,添加位移样式即可,移动的时间可以自行调整

三、完整代码

<template>

  <div class="digitalFlopBox">

    <div class="title">数字翻牌器</div>

    <div class="btn">

      <button @click="changeNum">点我</button>

    </div>

    <div class="boxContainer">

      <div class="box-item" v-for="(item, index) in state.numList" :key="index">

        <span class="itemNum" :class="{ isChange: state.flag }" ref="spanRefs">0123456789</span>

      </div>

    </div>

  </div>

</template>

<script setup lang='ts' name="funDigitalFlop">

import { reactive, ref, watch } from 'vue'

const spanRefs = ref()

const state = reactive({

  numList: [0],

  flag: false

})

const changeNum = () => {

  state.numList = [1, 5, 3, 2]

}

watch(() => state.numList, (newVal, oldVal) => {

  console.log(newVal, oldVal, '数据变化');

  if (newVal !== oldVal) {

    console.log(spanRefs.value);

    spanRefs.value.map((item: any, index: number) => {

      const span = spanRefs.value[index];

      if (span) {

        span.style.transform = `translate(-50%, -${newVal[index] * 10}%)`

      }

    })

  }

},

  { deep: true }

)

</script>

<style lang="scss" scoped>

.digitalFlopBox {

  .title {

    width: 100%;

    text-align: center;

    font-size: 30px;

    padding: 10px;

  }

  .btn {

    text-align: center;

    margin-bottom: 10px;

  }

  .boxContainer {

    display: flex;

    justify-content: center;

    align-items: center;

    width: 300px;

    height: 200px;

    background-color: #ccc;

    margin: 0 auto;

    .box-item {

      width: 30px;

      height: 50px;

      box-shadow: 0px 6px 9px 0px rgba(28, 119, 255, 0.25);

      border-radius: 2px 2px 2px 2px;

      background: rgba(10, 35, 126, 0.5);

      border: 1px solid #3978dd;

      color: #fff;

      text-align: center;

      line-height: 50px;

      font-size: 30px;

      margin-left: 10px;

      position: relative;

      writing-mode: vertical-lr; // 从左到右垂直排版

      text-orientation: upright;

      overflow: hidden; // 溢出隐藏

      .itemNum {

        position: absolute;

        top: 10px;

        left: 50%;

        transform: translateX(-50%);

        letter-spacing: 10px;

        transition: transform 1s ease-in-out;

      }

      // .isChange {

      //   transform: translate(-50%, -50%);

      // }

    }

  }

}

</style>

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue数字化大屏源码是一种基于Vue.js框架开发的用于创建数字化展示大屏的代码源文件。 Vue.js是一种轻量级的JavaScript框架,用于构建用户界面。它简化了前端开发过程并提供了丰富的功能和工具,使开发者能够快速构建可扩展的单页应用程序。 数字化大屏是一种用于展示数据、图表和统计信息的交互式显示屏。它可以用于各种应用场景,例如监控系统、数据分析、实时数据展示等。 Vue数字化大屏源码通常包含以下几个部分: 1. 组件:Vue数字化大屏源码是基于组件化开发的。每个组件都有自己的功能,例如数据可视化图表、实时数据更新、用户交互等。通过组件的复用和组合,可以构建出复杂的数字化大屏界面。 2. 数据绑定:Vue.js提供了简洁的模板语法和数据绑定机制,使开发者能够将数据和界面进行关联。在数字化大屏源码,可以使用数据绑定来实时更新界面上的数据展示。 3. 路由:Vue.js提供了路由功能,可以通过URL来导航页面。在数字化大屏源码,可以使用路由来实现页面之间的切换和导航。 4. API调用:数字化大屏通常需要从后端获取数据,Vue.js可以通过axios等插件进行API调用。源码可以包含与后端的数据交互逻辑,以及数据处理和展示的相关代码。 通过编写、使用Vue数字化大屏源码,开发者可以快速搭建出功能强大、可扩展的数字化大屏界面,满足各种数据展示需求。同时,Vue.js的高性能和响应式设计也能够为用户提供流畅的交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值