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 相关文章推荐
分享27个jQuery 表单插件集合推荐
Apr 25 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
JavaScript DOM基础
Apr 13 Javascript
jQuery实现径向动画菜单效果
Jul 17 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
vue组件发布到npm简单步骤
Nov 30 Javascript
浅析Vue项目中使用keep-Alive步骤
Jul 27 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
javascript事件循环event loop的简单模型解释与应用分析
Mar 14 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
JavaScript设计模式之原型模式详情
Jun 21 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入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
浅谈 javascript 事件处理
2015/01/04 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python生成器generator用法实例分析
2015/06/04 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
用python生成1000个txt文件的方法
2018/10/25 Python
使用python进行拆分大文件的方法
2018/12/10 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python 如何查找特定类型文件
2020/08/17 Python
python实现三壶谜题的示例详解
2020/11/02 Python
python中time tzset()函数实例用法
2021/02/18 Python
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
承办会议欢迎词
2014/01/17 职场文书
《云房子》教学反思
2014/04/20 职场文书
迎国庆演讲稿
2014/09/15 职场文书
见习报告怎么写
2014/10/31 职场文书
法定授权委托证明书
2015/06/18 职场文书
golang slice元素去重操作
2021/04/30 Golang
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python