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 相关文章推荐
获取HTML DOM节点元素的方法的总结
Aug 21 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
JavaScript 基本概念
Jan 20 Javascript
js实现鼠标感应图片展示的方法
Feb 27 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
Mar 06 Javascript
Django+Vue.js搭建前后端分离项目的示例
Aug 07 Javascript
js移动端事件基础及常用事件库详解
Aug 15 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
js中实例与对象的区别讲解
Jan 21 Javascript
JS实现简单的表格增删
Jan 16 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保存session到memcache服务器的方法
2016/01/19 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
js实现分页功能
2017/05/24 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
python环形单链表的约瑟夫问题详解
2018/09/27 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
详解django2中关于时间处理策略
2019/03/06 Python
python3获取当前目录的实现方法
2019/07/29 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
如何用python 操作zookeeper
2020/12/28 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
思想专业自荐信范文
2013/12/25 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
公司放假通知范文
2015/04/14 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
高一数学教学反思
2016/02/18 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书