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 相关文章推荐
jquery ui dialog实现弹窗特效的思路及代码
Aug 03 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
Dec 29 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
webpack2.0配置postcss-loader的方法
Aug 17 Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 Javascript
vue 实现微信浮标效果
Sep 01 Javascript
小程序自定义圆形进度条
Nov 17 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
详解小程序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
10条PHP高级技巧[修正版]
2011/08/02 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
js 动态选中下拉框
2009/11/26 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
我的中国梦口号
2014/06/16 职场文书
物流专业求职信
2014/06/30 职场文书
技术经济专业求职信
2014/09/03 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
艺术节开幕词
2015/01/28 职场文书
会计求职简历自我评价
2015/03/10 职场文书
中学总务处工作总结
2015/08/12 职场文书
详解Redis复制原理
2021/06/04 Redis
python脚本框架webpy模板控制结构
2021/11/20 Python