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的一种模块模式
Mar 22 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
Angular2 PrimeNG分页模块学习
Jan 14 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
Vue动态组件实例解析
Aug 20 Javascript
详解ES6系列之私有变量的实现
Nov 21 Javascript
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
es6中let和const的使用方法详解
Feb 24 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
提升PHP执行速度全攻略(下)
2006/10/09 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
如何在vue 中引入使用jquery
2020/11/10 jQuery
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
python中数字是否为可变类型
2020/07/08 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
公司同意接收函
2014/01/13 职场文书
高二英语教学反思
2014/01/19 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
实习科室评语
2015/01/04 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android