您的当前位置:首页>全部文章>文章详情
数据大屏 数据变化
发表于:2022-01-14浏览:24次TAG: #数据大屏

HTML代码

<html lang="en">
<head>
    <script src="./static/js/jquery.min.js"></script>
    <title>数据大屏-数字变化</title>
    <style>
        .numberItem {
            float: left;
            text-align: center;
            margin: 10px;
            overflow: hidden;
            width: 50px;
            height: 70px;
            line-height: 70px;
            float: left;
            /* background: #10213B; */
            box-shadow: 0 0 10px 0 #00a6ff inset;
            list-style: none;
            font-family: Digital-7;
            font-size: 60px;
            color: #00a6ff;
            margin-right: 3px;
        }
    </style>
</head>
<body>
<div id="num"></div>
</body>
<script type="text/javascript" src="static/js/numberAnimal.js"></script>
<script>
    let numberAnimal = new NumberAnimal('num', 24.15, 2)
    numberAnimal.loopAnimal( 24.72, 10)
</script>
</html>

numberAnimal.js 代码

class NumberAnimal {
    /***
     * 初始化防范
     * @param id 对应div id
     * @param originNumber 初始化数据
     * @param radixPointCount 小数点个数
     */
    constructor(id, originNumber, radixPointCount) {
        this.id = id;
        // this.originNumber = originNumber.toFixed(radixPointCount);
        this.radixPointCount = radixPointCount;
        this.rate = Math.pow(10, this.radixPointCount)
        this.originNumber = originNumber * this.rate;
        if (originNumber < 1) {
            this.numberCount = (this.originNumber + '').split('').length + 1;
        } else {
            this.numberCount = (this.originNumber + '').split('').length;
        }
        this._initOrigin()
    }
    /***
     * 初始化数据
     * @private
     */
    _initOrigin() {
        let numberArray = (this.originNumber + '').split('');
        let elementContent = '';
        for (let i = numberArray.length; i < this.numberCount; i++) {
            numberArray.unshift('0')
        }
        for (let i = 0; i < numberArray.length; i++) {
            if (i === numberArray.length - this.radixPointCount) {
                elementContent += '<div class="numberItem"><div class="row">.</div></div>'
            }
            elementContent += '<div class="numberItem"><div class="row" style="margin-top:' + -numberArray[i] * 70 + 'px">0</div><div class="row">1</div><div class="row">2</div><div class="row">3</div><div class="row">4</div><div class="row">5</div><div class="row">6</div><div class="row">7</div><div class="row">8</div><div class="row">9</div></div>'
        }
        $('#' + this.id).html(elementContent);
    }
    /***
     * 数据值变化
     * @param start
     * @param end
     * @private
     */
    _animal(start, end) {
        let startNumberArray = (start + '').split('');
        let endNumberArray = (end + '').split('');
        let instance = endNumberArray.length - startNumberArray.length;
        for (let i = 0; i < instance; i++) {
            $('#' + this.id).prepend('<div class="numberItem"><div class="row" style="margin-top:' + -(instance - endNumberArray[i]) * 70 + 'px">0</div><div class="row">1</div><div class="row">2</div><div class="row">3</div><div class="row">4</div><div class="row">5</div><div class="row">6</div><div class="row">7</div><div class="row">8</div><div class="row">9</div></div>')
        }
        for (let i = endNumberArray.length; i < this.numberCount; i++) {
            endNumberArray.unshift('0')
        }
        for (let i = startNumberArray.length; i < this.numberCount; i++) {
            startNumberArray.unshift('0')
        }
        console.log("start:" + startNumberArray.toString() + "\t end:" + endNumberArray.toString())
        for (let j = 0; j <= endNumberArray.length; j++) {
            if (j < (endNumberArray.length - this.radixPointCount)) {
                $($($('#' + this.id + ' .numberItem')[j]).find('.row')[0]).animate({marginTop: -endNumberArray[j] * 70 + 'px'})
            } else if (j > (endNumberArray.length - this.radixPointCount)) {
                $($($('#' + this.id + ' .numberItem')[j]).find('.row')[0]).animate({marginTop: -endNumberArray[j - 1] * 70 + 'px'})
            }
        }
    }
    /***
     * 数据变动的次数
     * @param end 最终成为的数据
     * @param time 过程变化次数
     */
    loopAnimal(end, time) {
        end = Math.round(end * this.rate)
        console.log(this.numberCount)
        let count = (end + '').split('').length;
        if (count > this.numberCount) {
            this.numberCount = count
        }
        let stepNum = Math.ceil((end - this.originNumber) / time);
        let t = this.originNumber + stepNum
        for (let i = time; i >= 0; i--) {
            if (this.originNumber < end && t >= end) {
                t = end
            }
            if (this.originNumber > end && t <= end) {
                t = end
            }
            this._animal(t - stepNum, t);
            t = t + stepNum
        }
        this.originNumber = end
    }
}

展示效果

Snipaste_2022-01-13_09-24-20.png

标签云