vue实现数字动态翻牌的效果(开箱即用)


Posted in Javascript onDecember 08, 2019

实现效果图

vue实现数字动态翻牌的效果(开箱即用)

原理

将1~9的数字竖直排版,通过translate移动位置显示不同数字,使用transition控制transform属性有动画效果

技术点

css 属性 writing-mode: vertical-lr,使数字竖直排版

移动  transform: translate(-50%, -40%); y值控制移动至哪个数字

transition  控制transform属性有动画效果

实现代码(注释比较详细,不再赘述)

<!--
 * @Author: mat
 * @Date: 2019-12-04 14:56:07
 * @LastEditTime: 2019-12-04 16:31:52
 * @LastEditors: Please set LastEditors
 * @Description: 实现数字翻牌动态效果,css 属性 writing-mode: vertical-lr,使数字竖直排版,
        2d移动 transform: translate(-50%, -40%); y值控制移动至哪个数字,transition 
        控制transform属性有动画效果 
 -->
<template>
  <div class="chartNum">
    <div class="box-item">
      <li :class="{'number-item': !isNaN(item), 'mark-item': isNaN(item) }"
        v-for="(item,index) in orderNum"
        :key="index">
          <span v-if="!isNaN(item)">
            <i ref="numberItem">0123456789</i>
          </span>
        <span class="comma" v-else>{{item}}</span>
      </li>
    </div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        orderNum: ['0', '0', '0', '0', '0', '0', '0', '0'], // 默认订单总数
      }
    },
    mounted(){
      setTimeout(() => {
        this.toOrderNum(12654) // 这里输入数字即可调用
      }, 500);
    },
    methods: {
        // 设置文字滚动
      setNumberTransform () {
       const numberItems = this.$refs.numberItem // 拿到数字的ref,计算元素数量
       const numberArr = this.orderNum.filter(item => !isNaN(item))
       // 结合CSS 对数字字符进行滚动,显示订单数量
       for (let index = 0; index < numberItems.length; index++) {
        const elem = numberItems[index]
        elem.style.transform = `translate(-50%, -${numberArr[index] * 10}%)`
       }
      },
      // 处理总订单数字
      toOrderNum(num) {
       num = num.toString()
       // 把订单数变成字符串
        if (num.length < 8) {
          num = '0' + num // 如未满八位数,添加"0"补位
          this.toOrderNum(num) // 递归添加"0"补位
        } else if (num.length === 8) {
          // 订单数中加入逗号
          // num = num.slice(0, 2) + ',' + num.slice(2, 5) + ',' + num.slice(5, 8)
          this.orderNum = num.split('') // 将其便变成数据,渲染至滚动数组
        } else {
          // 订单总量数字超过八位显示异常
          this.$message.warning('总量数字过大')
        }
        this.setNumberTransform()
      },
    }
  }
</script>
<style scoped lang='scss'>
   /*订单总量滚动数字设置*/
  .box-item {
    position: relative;
    height: 100px;
    font-size: 54px;
    line-height: 41px;
    text-align: center;
    list-style: none;
    color: #2D7CFF;
    writing-mode: vertical-lr;
    text-orientation: upright;
    /*文字禁止编辑*/
    -moz-user-select: none; /*火狐*/
    -webkit-user-select: none; /*webkit浏览器*/
    -ms-user-select: none; /*IE10*/
    -khtml-user-select: none; /*早期浏览器*/
    user-select: none;
    /* overflow: hidden; */
  }
  /* 默认逗号设置 */
  .mark-item {
    width: 10px;
    height: 100px;
    margin-right: 5px;
    line-height: 10px;
    font-size: 48px;
    position: relative;
    & > span {
      position: absolute;
      width: 100%;
      bottom: 0;
      writing-mode: vertical-rl;
      text-orientation: upright;
    }
  }
  /*滚动数字设置*/
  .number-item {
    width: 41px;
    height: 75px;
    /* 背景图片 */
    background: url(/images/text-bg-blue.png) no-repeat center center;
    background-size: 100% 100%;
    // background: #ccc;
    list-style: none;
    margin-right: 5px;
    // background:rgba(250,250,250,1);
    border-radius:4px;
    border:1px solid rgba(221,221,221,1);
    & > span {
      position: relative;
      display: inline-block;
      margin-right: 10px;
      width: 100%;
      height: 100%;
      writing-mode: vertical-rl;
      text-orientation: upright;
      overflow: hidden;
      & > i {
        font-style: normal;
        position: absolute;
        top: 11px;
        left: 50%;
        transform: translate(-50%,0);
        transition: transform 1s ease-in-out;
        letter-spacing: 10px;
      }
    }
  }
  .number-item:last-child {
    margin-right: 0;
  }
</style>

数字背景图片

vue实现数字动态翻牌的效果(开箱即用)

总结

以上所述是小编给大家介绍的vue实现数字动态翻牌的效果(开箱即用),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
分享一个asp.net pager分页控件
Jan 04 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
canvas红包照片实例分享
Feb 28 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
Dec 28 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 jQuery
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
小程序中设置缓存过期的实现方法
Jan 14 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 #Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 #Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 #Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 #Javascript
JQuery样式与属性设置方法分析
Dec 07 #jQuery
JQuery常用简单动画操作方法回顾与总结
Dec 07 #jQuery
json解析大全 双引号、键值对不在一起的情况
Dec 06 #Javascript
You might like
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
利用Python学习RabbitMQ消息队列
2015/11/30 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python搜索包的路径的实现方法
2019/07/19 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
python asyncio 协程库的使用
2021/01/21 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
六道php面试题附答案
2014/06/05 面试题
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
学习十八大报告感言
2014/02/04 职场文书
股权转让协议书范本
2014/04/12 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
Java获取字符串编码格式实现思路
2022/09/23 Java/Android