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 相关文章推荐
jquery全选/全不选/反选另一种实现方法(配合原生js)
Apr 07 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
Nov 12 Javascript
关于jquery中全局函数each使用介绍
Dec 10 Javascript
含有CKEditor的表单如何提交
Jan 09 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
详解Javascript模板引擎mustache.js
Jan 20 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
详解如何使用nvm管理Node.js多版本
May 06 Javascript
layui form.render('select', 'test2') 更新渲染的方法
Sep 27 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
May 06 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
DISCUZ 分页代码
2007/01/02 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
实例说明Python中比较运算符的使用
2015/05/13 Python
Python中max函数用法实例分析
2015/07/17 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
Python tkinter label 更新方法
2018/10/11 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Django 自动生成api接口文档教程
2019/11/19 Python
jupyter 导入csv文件方式
2020/04/21 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
在校硕士自我鉴定
2014/01/23 职场文书
优秀团队获奖感言
2014/02/19 职场文书
租房安全协议书
2014/08/20 职场文书
城南旧事观后感
2015/06/11 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python