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的caller,callee,call,apply
Apr 28 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
微信小程序 标签传入数据
May 08 Javascript
vue.js的安装方法
May 12 Javascript
详解在Angular项目中添加插件ng-bootstrap
Jul 04 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 Javascript
idea编译器vue缩进报错问题场景分析
Jul 04 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
利用PHP实现与ASP Banner组件相似的类
2006/10/09 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
几种响应式文字详解
2017/05/19 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
重命名批处理python脚本
2013/04/05 Python
简单介绍Python中的struct模块
2015/04/28 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
创建Django项目图文实例详解
2019/06/06 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
请介绍一下Ant
2016/07/22 面试题
大课间活动制度
2014/01/18 职场文书
贺卡寄语大全
2014/04/11 职场文书
党员演讲稿
2014/09/04 职场文书
法定授权委托证明书
2014/09/27 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
会议欢迎词
2015/01/23 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
五年级作文之成长
2019/09/16 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS