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 相关文章推荐
IE8对JS通过属性和数组遍历解析不一样的地方探讨
May 06 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
May 11 Javascript
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
完美JQuery图片切换效果的简单实现
Jul 21 Javascript
微信开发 消息推送实现代码
Oct 21 Javascript
JS中substring与substr的用法
Nov 16 Javascript
Swiper实现轮播图效果
Jul 03 Javascript
vue.js路由跳转详解
Aug 28 Javascript
Vue.js实现的购物车功能详解
Jan 27 Javascript
JS数组的常用10种方法详解
May 08 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生成便于打印的网页
2006/10/09 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
微信小程序 如何获取网络状态
2019/07/26 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
python发送邮件脚本
2018/05/22 Python
Django实现发送邮件功能
2019/07/18 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
如何做好总经理助理
2013/11/12 职场文书
工会主席岗位责任制
2014/02/11 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技