vue大屏数字翻牌,数字采用svg

参考https://blog.csdn.net/weixin_43548442/article/details/121392929重新编写,增加了svg矢量显示。

<template>
  <ul class="fp-box" :style="{ height: `${numberHight}px` }">
    <li
      ref="li"
      v-for="i in limt"
      :key="i"
      :style="{ width: `${numberWidth - 5}px` }"
    >
      <span
        v-for="(item, i) in numSvgDatas"
        :key="i"
        :style="{ width: `${numberWidth}px` }"
      >
        <svg
          viewBox="0 0 1024 1024"
          xmlns="http://www.w3.org/2000/svg"
          :width="numberHight"
          :height="numberWidth"
        >
          <path :d="item" :fill="fontColor"></path>
        </svg>
      </span>
    </li>
  </ul>
</template>

<script>
//参考: https://blog.csdn.net/weixin_43548442/article/details/121392929
export default {
  name: "digitalFlop",
  data() {
    return {
      numArr: [],
      numSvgDatas: [
        "M257.5 498.6V190l53.7-53.5 53.7 53.5v246.4l-107.4 62.2z m0 336v-308L364.9 580v254.6L311.2 888l-53.7-53.4z m70.6-715.5l54.8-54.9H643l55.1 54.9-55.1 52.4H382.8l-54.7-52.4z m0 786.2l54.8-52.4H643l55.1 52.4-55.1 54.9H382.8l-54.7-54.9z m332.2-468.6V190.3l53.7-53.5 53.7 53.5v308.6l-107.4-62.2z m0 397.8V579.4l107.3-53.5v308.6L714 888l-53.7-53.5z",
        "M458.1 435.9v-265l107.2-107v434.2l-107.2-62.2z m0 416.7V579.1l107.2-53.5v433.9L458.1 852.6z",
        "M257.7 171.6L383 64.2h260.1l54.8 54.9-54.8 52.4H257.7z m0 662.8V525.8L365 579.4v255.1L311.3 888l-53.6-53.6z m24.5-323.2l100.8-58h260.1l101.2 58-101.2 49.4H383l-100.8-49.4z m46 394.1l54.8-52.4h282.5l102.4 107.3H383l-54.8-54.9z m332.3-469V190l53.7-53.5 53.7 53.5v308.6l-107.4-62.3z",
        "M268.5 64.2h363.1l54.8 54.9-54.8 52.4H371.5l-103-107.3z m0 896l103-107.3h260.1l54.8 52.4-54.8 54.9H268.5z m2.2-448l100.8-59h260.1l101.1 58-101.1 49.4H371.5l-100.8-48.4zM649 436.3V190l53.7-53.5 53.7 53.5v308.6L649 436.3z m0 398.1v-255l107.3-53.5v308.6L702.6 888 649 834.4z",
        "M257.7 498.6V64.2l107.3 107v265.1l-107.3 62.3z m24.5 13.6l100.7-59h259.9l101.1 58-101.1 49.3H382.9l-100.7-48.3z m378-75.8V171.5l107.3-107v434l-107.3-62.1z m0 416.9V579.7l107.3-53.5v434L660.2 853.3z",
        "M257.5 498.6V190l53.7-53.5 53.7 53.5v246.4l-107.4 62.2z m0 461.6l102.9-107.3h282.5l54.8 52.4-54.8 54.9H257.5z m24.5-449l100.8-58h260.1l101.2 58-101.2 49.4H382.8L282 511.2z m46.1-392.1l54.8-54.9h362.5L642.9 171.6H382.8l-54.7-52.5z m332.2 715.3v-255l107.3-53.5v308.6L714 887.9l-53.7-53.5z",
        "M257.5 498.6V190l53.7-53.5 53.7 53.5v246.4l-107.4 62.2z m0 335.8V525.8l107.3 53.5v255.1l-53.7 53.5-53.6-53.5zM282 512.2l100.8-59h260.1l101.2 58-101.2 49.4H382.8L282 512.2z m46.1-393.1l54.8-54.9h362.5L642.9 171.6H382.8l-54.7-52.5z m0 786.2l54.8-52.4H643l55.1 52.4-55.1 54.9H382.8l-54.7-54.9z m332.2-70.8V579.4l107.3-53.5v308.6L714 888l-53.7-53.5z",
        "M265.7 63.9h476.1L632.4 171.2H372.6L265.7 63.9zM651.6 436V189.6L759 81.3v416.9L651.6 436z m0 417.2V579.4L759 525.9v434.3l-107.4-107z",
        "M257.5 498.6V190l53.7-53.5 53.7 53.5v246.4l-107.4 62.2z m0 336v-308L364.9 580v254.6L311.2 888l-53.7-53.4z m24.5-322l100.8-59.3h260.1l101.2 58-101.2 49.4H382.8L282 512.6z m46.1-393.5l54.8-54.9H643l55.1 54.9-55.1 52.4H382.8l-54.7-52.4z m0 786.2l54.8-52.4H643l55.1 52.4-55.1 54.9H382.8l-54.7-54.9z m332.2-468.6V190.3l53.7-53.5 53.7 53.5v308.6l-107.4-62.2z m0 397.8V579.4l107.3-53.5v308.6L714 888l-53.7-53.5z",
        "M257.5 498.6V190l53.7-53.5 53.7 53.5v255l-107.4 53.6z m22.4 461.6l102.9-107.3h260.1l54.8 52.4-54.8 54.9h-363z m2.1-448l100.8-59h260.1l101.2 58-101.2 49.4H382.8L282 512.2z m46.1-393.1l54.8-54.9H643l55.1 54.9-55.1 52.4H382.8l-54.7-52.4zM660.3 445V190l53.7-53.5 53.7 53.5v308.6L660.3 445z m0 389.4V588.1l107.3-62.2v308.6L714 887.9l-53.7-53.5z",
      ],
    };
  },
  props: {
    num: {
      type: Number,
      default: 0,
      require: true,
    },
    limt: {
      type: Number,
      default: 5,
    },
    fontColor: {
      type: String,
      default: "#FFF",
    },
    numberHight: {
      type: Number,
      default: 30,
    },
    numberWidth: {
      type: Number,
      default: 20,
    },
  },
  watch: {
    num(val) {
      this.init(val);
    },
  },
  mounted() {
    setTimeout(() => {
      this.init(this.num);
    }, 500);
  },
  methods: {
    init(num) {
      this.numArr = String(num).split("");
      let len = this.numArr.length;
      for (let i = 0; i < this.limt - len; i++) {
        this.numArr.unshift(0);
      }

      this.$refs.li.forEach((item, index) => {
        let ty = this.numArr[index];
        item.setAttribute("class", `item0${ty}`);
        item.style.transform = `translateY(-${ty * this.numberHight}px)`;
      });
    },
  },
};
</script>

<style lang="scss" scoped>
* {
  margin: 0;
  padding: 0;
}
.fp-box {
  display: flex;
  overflow: hidden;
  li {
    -webkit-text-size-adjust: none;
    margin: 0px;
    flex-direction: column;
    transition: transform 1s ease-in-out;
    list-style-type: none;
    span {
      float: left;
    }
  }
}

@for $i from 0 through 9 {
  $base-font-size: -20px;
  .item0#{$i} {
    transform: translateY($i * $base-font-size);
  }
}
</style>

使用:

<digitalFlop :num="head.today" :fontColor="'gold'" />

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中实现大屏数字翻转动画可以使用CSS动画和Vue的过渡效果结合来实现。下面是一个简单的示例代码: ```html <template> <div class="number-container"> <transition name="flip"> <span :key="currentNumber" class="number">{{ currentNumber }}</span> </transition> </div> </template> <script> export default { data() { return { currentNumber: 0, }; }, mounted() { // 模拟数据更新 setInterval(() => { this.currentNumber = Math.floor(Math.random() * 100); // 生成一个随机数 }, 2000); }, }; </script> <style> .number-container { display: flex; align-items: center; justify-content: center; height: 200px; } .number { font-size: 48px; font-weight: bold; animation: flip 1s ease-in-out; } @keyframes flip { 0% { transform: rotateX(0); } 50% { transform: rotateX(90deg); } 100% { transform: rotateX(0); } } .flip-enter-active { animation: flip 1s ease-in-out; } .flip-leave-active { animation: flip 1s ease-in-out reverse; } </style> ``` 在上面的代码中,我们使用了Vue的过渡效果来实现数字的翻转动画。通过设置`<transition>`组件的`name`属性为"flip",然后在CSS中定义了名为"flip"的动画效果。在`mounted`钩子函数中,我们使用`setInterval`函数模拟数据的更新,每隔2秒更新一次`currentNumber`的值。当`currentNumber`的值发生变化时,Vue的过渡效果会自动触发,从而实现数字的翻转动画效果。 希望这个示例能帮助到你实现Vue大屏数字翻转动画。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值