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实例属性和原型属性示例详解
Nov 23 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
超详细的JS弹出窗口代码大全
Apr 18 Javascript
Bootstrap警告(Alerts)的实现方法
Mar 22 Javascript
JavaScript实现三级联动菜单效果
Aug 16 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
May 10 Javascript
看看“疫苗查询”小程序有温度的代码
Jul 31 Javascript
浅入深出Vue之组件使用
Jul 11 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
Apr 29 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 04 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 获取远程文件内容的函数代码
2010/03/24 PHP
php ftp文件上传函数(基础版)
2010/06/03 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
Python实现的简单模板引擎功能示例
2017/09/02 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
护理自荐信
2013/10/22 职场文书
如何写好自荐信
2014/04/07 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
法制宣传月活动总结
2014/04/29 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
青奥会口号
2014/06/12 职场文书
辞职信怎么写
2015/02/27 职场文书
信用卡工作证明范本
2015/06/19 职场文书
社区安全温馨提示语
2015/07/14 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
js不常见操作运算符总结
2021/11/20 Javascript