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 相关文章推荐
javascript垃圾收集机制与内存泄漏详细解析
Nov 11 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
JS两种类型的表单提交方法实例分析
Nov 28 Javascript
AngularJS中下拉框的基本用法示例
Oct 11 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
node+multer实现图片上传的示例代码
Feb 18 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 Javascript
element中table高度自适应的实现
Oct 21 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 number_format() 函数定义和用法
2012/06/01 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
Python列表和元组的定义与使用操作示例
2017/07/26 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
电厂厂长岗位职责
2014/01/02 职场文书
出国考察邀请函
2014/01/21 职场文书
《散步》教学反思
2014/03/02 职场文书
小班开学寄语
2014/04/04 职场文书
大专毕业生求职信
2014/07/05 职场文书
张思德观后感
2015/06/09 职场文书
《叶问2》观后感
2015/06/15 职场文书
委托书范本格式
2019/04/18 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Go语言设计模式之结构型模式
2021/06/22 Golang
vue自定义右键菜单之全局实现
2022/04/09 Vue.js