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 相关文章推荐
Web层改进II-用xmlhttp 无声息提交复杂表单
Jan 22 Javascript
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
让mayfish支持mysqli数据库驱动的实现方法
May 22 Javascript
来自国外的页面JavaScript文件优化
Dec 08 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
详解jQuery中的empty、remove和detach
Apr 11 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
May 28 Javascript
详解Vue打包优化之code spliting
Apr 09 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
React 组件中的 bind(this)示例代码
Sep 16 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP 事件机制(2)
2011/03/23 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
js获取域名的方法
2015/01/27 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
python图像常规操作
2017/11/11 Python
pycharm修改file type方式
2019/11/19 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
使用索引有什么好处
2016/07/27 面试题
班级德育工作实施方案
2014/02/21 职场文书
感恩教育活动总结
2014/05/05 职场文书
活动总结报告格式
2014/05/09 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js