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实现给图片加链接
Aug 15 Javascript
SinaEditor使用方法详解
Dec 28 Javascript
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
使用 js+正则表达式为关键词添加链接
Nov 11 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
vue2.0实现前端星星评分功能组件实例代码
Feb 12 Javascript
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
html中创建并调用vue组件的几种方法汇总
Nov 17 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
python求众数问题实例
2014/09/26 Python
python中assert用法实例分析
2015/04/30 Python
Python实现读取并保存文件的类
2017/05/11 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
python实现统计代码行数的小工具
2019/09/19 Python
python/golang 删除链表中的元素
2020/09/14 Python
python实现简单猜单词游戏
2020/12/24 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
公司领导推荐信
2013/11/12 职场文书
社团成立邀请函
2014/01/08 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
通用员工手册范本
2015/05/14 职场文书
小学同学聚会感言
2015/07/30 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python