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 相关文章推荐
类似CSDN图片切换效果脚本
Sep 17 Javascript
js左侧多级菜单动态的解决方案
Feb 01 Javascript
清空上传控件input file的值
Jul 03 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
用js小类库获取浏览器的高度和宽度信息
Jan 15 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
jquery实现的省市区三级联动
Apr 02 Javascript
一张Web前端的思维导图分享
Jul 03 Javascript
JavaScript中的this到底是什么(一)
Dec 09 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
JavaScript数据类型的存储方法详解
Aug 25 Javascript
vue2.0+koa2+mongodb实现注册登录
Apr 10 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_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
js资料prototype 属性
2007/03/13 Javascript
js中cookie的使用详细分析
2008/05/28 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python 整数越界问题详解
2019/06/27 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
pandas数据拼接的实现示例
2020/04/16 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
python实现AdaBoost算法的示例
2020/10/03 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
保密承诺书范文
2014/03/27 职场文书
团日活动总结怎么写
2014/06/25 职场文书
金融保险专业求职信
2014/09/03 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
Vue的生命周期一起来看看
2022/02/24 Vue.js