vue实现数字滚动效果


Posted in Javascript onJune 29, 2020

本文实例为大家分享了vue实现数字滚动的具体代码,供大家参考,具体内容如下

<template>
 <div class="num-block">
  <div class="num-block_show">
   <div class="num-block_numbers" :class="{'ellipsis': !isNum(item)}" v-for="(item, key) in numbers" :key="key">
    <!-- <ul class="num-block_ul" :style="ulStyles(noNumbers(item, key))" v-if="isNum(item)"> -->
    <ul class="num-block_ul" :style="ulStyles(item, key)" v-if="isNum(item)">
     <!-- <li v-for="(opt, index) in noNumbers(item, key)" :key="index">
      {{ opt }}
     </li> -->
     <li>0</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>4</li>
     <li>5</li>
     <li>6</li>
     <li>7</li>
     <li>8</li>
     <li>9</li>
    </ul>
    <div class="num-block_ellipsis" v-else>,</div>
   </div>
  </div>
  <!-- <div style="position:absolute;top:250px;left:0">
   {{ this.numbers }}
  </div> -->
 </div>
</template>

<script>
 export default {
  name: "ws-num-block",
  props: ['data'],
  data() {
   return {
    currentData: '10',
    lastData: '10'
   }
  },
  computed: {
   numbers() {
    let data = this.data;
    if(!data) {
     return
    }
    data = this.dealData(data);
    return data;
   }
  },
  watch: {
   data(val){
    let lastData = this.currentData;
    this.currentData = this.dealData(val);
    this.lastData = lastData;
   }
  },
  methods: {
   noNumbers(item, key) {
    let lastData = this.lastData;
    let lastItem = this.lastData[key];
    let result = [];
    lastItem = lastItem ? lastItem : '0';
    if(lastItem != item) {
     if(lastItem == ',' || item == ',') {
      result.push(item);
      return result;
     }else {
      let meal = 0;
      if(Number(item) < Number(lastItem)) {
       meal = Number(item) + 10 - Number(lastItem);
      }else {
       meal = Number(item) - Number(lastItem);
      }
      for(let i=0;i<meal+1;i++) {
       if(Number(lastItem) > 9) {
        lastItem = 0;
       }
       result.push(lastItem.toString());
       lastItem++;
      }
      return result;
     }
    }else {
     result.push(item);
     return result;
    }
   },
   // ulStyles(arr) {
   ulStyles(item, key) {
    // if(!arr) {
    //  return
    // }
    let top = 0;
    // let currentTop = -26 * Number(arr.length-1);
    let currentTop = -30 * Number(item);
    top = currentTop + 'px';
    // top = 0;
    return {
     'position': 'absolute',
     'left': 0,
     'top': top,
     'width': '12px',
     'list-style': 'none',
     'padding': '0',
     'margin': '0',
     'transition': '1s'
    }
   },
   isNum(val) {
    return val == ',' ? false : true
   },
   dealData(val) {
    let vals = val.toString().split('').reverse();
    let dealData = [];
    for(let i=0;i<vals.length;i++) {
     if( i > 0 && i%3 == 0 ) {
      dealData.push(',');
     }
     dealData.push(vals[i]);
    }
    dealData = dealData.reverse().join('');
    return dealData;
   }
  }
 };
</script>
<style lang="sass">
 .num-block
  width: 100%
  height: auto
  &_show
   display: flex
   justify-content: center
   height: 30px
   overflow: hidden
  &_numbers
   position: relative
   width: 14px
  &_numbers.ellipsis
   width: 6px
  &_ul>li
   height: 30px
   line-height: 30px
  &_ellipsis
   position: absolute
   left: 0
   top: 0
   width: 6px
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
javascript获取选中的文本的方法代码
Oct 30 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
JavaScript调用客户端Java程序的方法
Jul 27 Javascript
vue监听对象及对象属性问题
Aug 20 Javascript
validform表单验证的实现方法
Mar 08 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
javascript实现点击星星小游戏
Dec 24 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 #Javascript
Vue实现可移动水平时间轴
Jun 29 #Javascript
uniapp与webview之间的相互传值的实现
Jun 29 #Javascript
基于Element封装一个表格组件tableList的使用方法
Jun 29 #Javascript
iview实现图片上传功能
Jun 29 #Javascript
vue+animation实现翻页动画
Jun 29 #Javascript
vue+element实现图片上传及裁剪功能
Jun 29 #Javascript
You might like
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
三种php连接access数据库方法
2013/11/11 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
vue项目引入ts步骤(小结)
2019/10/31 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
python变量的存储原理详解
2019/07/10 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
海南地接欢迎词
2014/01/14 职场文书
工厂会计员职责
2014/02/06 职场文书
质量保证书范本
2014/04/29 职场文书
团队激励口号
2014/06/06 职场文书
机械机修工岗位职责
2014/08/03 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python