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 相关文章推荐
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
一款由jquery实现的整屏切换特效
Sep 15 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
Apr 12 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
Bootstrap简单表单显示学习笔记
Nov 15 Javascript
vue语法之拼接字符串的示例代码
Oct 25 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
vue2单元测试环境搭建
May 24 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
koa大型web项目中使用路由装饰器的方法示例
Apr 02 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
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
功能强大的php文件上传类
2016/08/29 PHP
php unlink()函数使用教程
2018/07/12 PHP
js 回车提交表单两种实现方法
2012/12/31 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
vue.js的安装方法
2017/05/12 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
layui table 参数设置方法
2018/08/14 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
python在windows下实现备份程序实例
2014/07/04 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python 同时运行多个程序的实例
2019/01/07 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
python基于opencv实现人脸识别
2021/01/04 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
物流仓储计划书
2014/01/10 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
国培计划培训感言
2014/03/11 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
综治目标管理责任书
2015/05/11 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS