美文网首页
Vue指令封装 - 数字定时自动增长(网站浏览量、充值量自动增加

Vue指令封装 - 数字定时自动增长(网站浏览量、充值量自动增加

作者: Tauruse | 来源:发表于2020-04-20 21:34 被阅读0次

今天写代码时刚好需要这么一个功能,再网上找了一下,没有找到符合需求的,就东拼西凑的写了一个,只保证能运行,性能啥的还没考虑,把代码贴上来防止以后会用到

需求描述

用户可以看到数字定时随机新增,比如网站的浏览量或者是用户的充值量等功能,网上还有更复杂的带动画效果的,但是不是我需要的,我只是需要数字不断定时增大的效果就可以了

代码里面用到了jQuery,如果没有用到的可以自己改一下用到jquery的几个地方

代码如下:

export default {
        name: “”,
        props: [""],
        data() {
            return {
                
            };
        },

        components: {},

        computed: {},

        beforeMount() {},

        mounted() {
            
        },

        methods: {

        },

        watch: {},

        directives: {

            // 自动增长
            digital: {
                inserted: function(ele) {
                    if (ele.timer) clearInterval(this.timer)

                    let func = () = >{
                        let min = parseFloat($(ele).attr('digital-min'))

                        let digitalMin = $(ele).html() ? resetMoney($(ele).html()) : min;

                        if (digitalMin < min) return;

                        let addMin = $(ele).attr('add-min');
                        let addMax = $(ele).attr('add-max');

                        // 默认增长带小数
                        addMin = addMin ? addMin: 3;
                        addMax = addMax ? addMax: 20;

                        let noPoints = $(ele)[0].hasAttribute('not-point');
                        let noThousandth = $(ele)[0].hasAttribute('not-thousandth');

                        let addNumber = randomNum(addMax, addMin, noPoints ? '': 2) addNumber = noPoints ? parseInt(addNumber) : parseFloat(addNumber)

                        addNumber = digitalMin + addNumber;
                        addNumber = noThousandth ? addNumber: formatNumber(addNumber, 2)

                        $(ele).html(addNumber)
                    }

                    let time = $(ele).attr('time') ? $(ele).attr('time') : 2000

                    ele.timer = setInterval(() = >{
                        func()
                    },
                    time)
                }
            }
        }
    };
//使用到的 工具函数
/**
 * 将数值格式化成金额形式
 *
 * @param num 数值(Number或者String)
 * @param precision 精度,默认不变
 * @param separator 分隔符,默认为逗号
 * @return 金额格式的字符串,如'1,234,567',默认返回NaN
 * @type String
 */
export function formatNumber(num, precision, separator) {
    var parts;
    // 判断是否为数字
    if (!isNaN(parseFloat(num)) && isFinite(num)) {
        // 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么
        // 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num))
        // 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119)
        // 的值变成了 12312312.123456713
        num = Number(num);
        // 处理小数点位数
        num = (typeof precision !== 'undefined' ? (Math.round(num * Math.pow(10,precision)) / Math.pow(10,precision)).toFixed(precision) : num).toString();
        // 分离数字的小数部分和整数部分
        parts = num.split('.');
        // 整数部分加[separator]分隔, 借用一个著名的正则表达式
        parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ','));

        return parts.join('.');
    }
    return NaN;
}

export function resetMoney(e) {
    return parseFloat(e.replace(/[^\d\.-]/g, ""));
}

/***************************************
 * 生成从minNum到maxNum的随机数。
 * 如果指定decimalNum个数,则生成指定小数位数的随机数
 * 如果不指定任何参数,则生成0-1之间的随机数。
 *
 * @minNum:[数据类型是Integer]生成的随机数的最小值(minNum和maxNum可以调换位置)
 * @maxNum:[数据类型是Integer]生成的随机数的最大值
 * @decimalNum:[数据类型是Integer]如果生成的是带有小数的随机数,则指定随机数的小数点后的位数
 *
 ****************************************/
export function randomNum(maxNum, minNum, decimalNum) {
    var max = 0, min = 0;
    minNum <= maxNum ? (min = minNum, max = maxNum) : (min = maxNum, max = minNum);
    switch (arguments.length) {
        case 1:
            return Math.floor(Math.random() * (max + 1));
            break;
        case 2:
            return Math.floor(Math.random() * (max - min + 1) + min);
            break;
        case 3:
            return (Math.random() * (max - min) + min).toFixed(decimalNum);
            break;
        default:
            return Math.random();
            break;
    }
}
<!-- 在html代码中使用 -->
<li><span v-digital digital-min="398483" not-thousandth  not-point  addmin="2" addmax="5" time="1000"></span>人</li>

参数说明

在需要使用的dom元素上增加属性 v-digital
digital-min 表示增长的初始值
addmin 表示增加数量的最小值,默认为3
addmax 表示增加数量的最大值,默认为20
time 表示定时增加数量的时间间隔
not-thousandth 表示不需要进行千位分隔,默认是会对数字进行千位分隔处理,比如 “1234”会处理成"1,234"
not-point 表示不保留小数点,默认保留小数点两位

相关文章

  • Vue指令封装 - 数字定时自动增长(网站浏览量、充值量自动增加

    今天写代码时刚好需要这么一个功能,再网上找了一下,没有找到符合需求的,就东拼西凑的写了一个,只保证能运行,性能啥的...

  • VUE进阶

    封装自定义vue指令 1. 封装输入框自动聚焦指令 在utils工具包中创建directives.js文件复制自动...

  • Django定义模型类常用的属性

    字段类型 AutoField: 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属...

  • Django模型类拓展

    1.字段类型 AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建...

  • EXCEL中的自动换行与自动调整行高

    表现:自动换行本身可实现列宽不变,而自动增加行数;但当行高固定时,行数会增加,行高仍固定。 说明:自动换行调整的对...

  • 公民行为合约

    Freecoin“公民行为”合约: 1.看视频自动得到Coin(浏览量)0.0001 2.跑步运动健身自动得到Co...

  • Vue.js 学习笔记(二)

    自定义指令 示例,文本框自动获取焦点 自定义全局指令 使用 Vue.directive() 定义全局指令。 和样式...

  • 封装移动端 vue 拖拽指令

    封装移动端 vue 拖拽指令 通过vue自定义指令,将拖拽行为封装为指令 使用transform做移动效果,需要注...

  • vue中自定义组件、指令、插件

    组件 全局组件 局部组件 自定义插件 提供install方法,挂载到Vue 指令 使用指令实现input自动获取焦...

  • 网赚项目淘富宝

    1、每天早上8点手动点击开始任务,手机自动点广告,晚上6点自动停止浏览淘宝广告,可以看到淘宝商品浏览量收益以及分润...

网友评论

      本文标题:Vue指令封装 - 数字定时自动增长(网站浏览量、充值量自动增加

      本文链接:https://www.haomeiwen.com/subject/relsihtx.html