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 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
js事件(Event)知识整理
Oct 11 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
Apr 22 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
JS创建对象的写法示例
Nov 04 Javascript
Vue from-validate 表单验证的示例代码
Sep 26 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 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数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
PHP 裁剪图片
2021/03/09 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
python3+PyQt5实现拖放功能
2018/04/24 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
python实现字符串加密成纯数字
2019/03/19 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
python调用win32接口进行截图的示例
2020/11/11 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
2016新年致辞
2015/08/01 职场文书