网页常见数字滚动效果

//数字滚动代码
function countUp(target, startVal, endVal, decimals, duration, options) {
    this.options = options || {useEasing: true, useGrouping: true, separator: ',', decimal: '.'}
    if (this.options.separator == '') this.options.useGrouping = false;
    if (this.options.prefix == null) this.options.prefix = '';
    if (this.options.suffix == null) this.options.suffix = '';
    var self = this;
    this.d = (typeof target === 'string') ? document.getElementById(target) : target;
    this.startVal = Number(startVal);
    this.endVal = Number(endVal);
    this.countDown = (this.startVal > this.endVal) ? true : false;
    this.startTime = null;
    this.timestamp = null;
    this.remaining = null;
    this.frameVal = this.startVal;
    this.rAF = null;
    this.decimals = Math.max(0, decimals || 0);
    this.dec = Math.pow(10, this.decimals);
    this.duration = duration * 1000 || 2000;
    this.version = function () {
        return '1.3.3'
    }
    this.printValue = function (value) {
        var result = (!isNaN(value)) ? self.formatNumber(value) : '--';
        if (self.d.tagName == 'INPUT') {
            this.d.value = result;
        }
        else if (self.d.tagName == 'text') {
            this.d.textContent = result;
        }
        else {
            this.d.innerHTML = result;
        }
    }
    this.easeOutExpo = function (t, b, c, d) {
        return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;
    }
    this.count = function (timestamp) {
        if (self.startTime === null) self.startTime = timestamp;
        self.timestamp = timestamp;
        var progress = timestamp - self.startTime;
        self.remaining = self.duration - progress;
        if (self.options.useEasing) {
            if (self.countDown) {
                var i = self.easeOutExpo(progress, 0, self.startVal - self.endVal, self.duration);
                self.frameVal = self.startVal - i;
            } else {
                self.frameVal = self.easeOutExpo(progress, self.startVal, self.endVal - self.startVal, self.duration);
            }
        } else {
            if (self.countDown) {
                var i = (self.startVal - self.endVal) * (progress / self.duration);
                self.frameVal = self.startVal - i;
            } else {
                self.frameVal = self.startVal + (self.endVal - self.startVal) * (progress / self.duration);
            }
        }
        if (self.countDown) {
            self.frameVal = (self.frameVal < self.endVal) ? self.endVal : self.frameVal;
        } else {
            self.frameVal = (self.frameVal > self.endVal) ? self.endVal : self.frameVal;
        }
        self.frameVal = Math.round(self.frameVal * self.dec) / self.dec;
        self.printValue(self.frameVal);
        if (progress < self.duration) {
            self.rAF = requestAnimationFrame(self.count);
        } else {
            if (self.callback != null) self.callback();
        }
    }
    this.start = function (callback) {
        self.callback = callback;
        if (!isNaN(self.endVal) && !isNaN(self.startVal)) {
            self.rAF = requestAnimationFrame(self.count);
        } else {
            console && console.log('countUp error: startVal or endVal is not a number');
            self.printValue();
        }
        return false;
    }
    this.stop = function () {
        cancelAnimationFrame(self.rAF);
    }
    this.reset = function () {
        self.startTime = null;
        self.startVal = startVal;
        cancelAnimationFrame(self.rAF);
        self.printValue(self.startVal);
    }
    this.resume = function () {
        self.stop();
        self.startTime = null;
        self.duration = self.remaining;
        self.startVal = self.frameVal;
        requestAnimationFrame(self.count);
    }
    this.update = function (newEndval) {
        self.stop();
        self.startTime = null;
        self.startVal = self.endVal;
        self.endVal = Number(newEndval);
        self.countDown = (self.startVal > self.endVal) ? true : false;
        self.rAF = requestAnimationFrame(self.count);
    }
    this.formatNumber = function (nStr) {
        nStr = nStr.toFixed(self.decimals);
        nStr += '';
        var x, x1, x2, rgx;
        x = nStr.split('.');
        x1 = x[0];
        x2 = x.length > 1 ? self.options.decimal + x[1] : '';
        rgx = /(\d+)(\d{3})/;
        if (self.options.useGrouping) {
            while (rgx.test(x1)) {
                x1 = x1.replace(rgx, '$1' + self.options.separator + '$2');
            }
        }
        return self.options.prefix + x1 + x2 + self.options.suffix;
    }
    self.printValue(self.startVal);
}


$(function(){
    var rateNumOptions = {useEasing: true, useGrouping: true, separator: '', decimal: '.', prefix: '', suffix: ''};
    var rateFlag = true;
    var rateArr = [];
    $(' .number-box .number-add').each(function (index) {
        var stopNum = $(this).html();
        var rateCountUp = new countUp(this, 0, stopNum, 0, 3, rateNumOptions);
        rateArr.push(rateCountUp);
    });
    function numberAdd() {
        var topOffset = $(this).scrollTop();
        var topJudge = $(' .number-box').offset().top - topOffset - $(window).innerHeight();
        if (topJudge < -15 && rateFlag) {
            rateFlag = false;
            for (var i = 0; i < rateArr.length; i++) {
                rateArr[i].start();
            }
        }
    }
    numberAdd();
    $(window).scroll(numberAdd);

});


html结构如下图




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中实现数字滚动效果可以使用代码实现。首先,需要一个整型变量来存储要滚动数字。然后,可以使用协程来实现逐渐增加或减少的效果。 例如,我们可以创建一个Text组件来显示滚动数字,然后在代码中定义一个公共整型变量num,并在Start函数中将其初始化为0。在协程函数ScrollNumber中,可以使用Mathf.Lerp函数来实现数字的平滑滚动效果。通过在Update函数中调用协程函数,可以在游戏运行时触发数字滚动。代码示例如下: ```C# using UnityEngine; using UnityEngine.UI; public class NumberScroller : MonoBehaviour { public Text numberText; public int targetNumber; public float scrollSpeed; private int num; private void Start() { num = 0; StartCoroutine(ScrollNumber()); } private IEnumerator ScrollNumber() { while (num != targetNumber) { num = (int)Mathf.Lerp(num, targetNumber, Time.deltaTime * scrollSpeed); numberText.text = num.ToString(); yield return null; } } private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { targetNumber = Random.Range(0, 100); StartCoroutine(ScrollNumber()); } } } ``` 上述代码中,numberText是一个Text组件,用于显示滚动数字。targetNumber是目标数字,scrollSpeed是滚动的速度。在Update函数中,通过按下空格键来随机生成一个目标数字,并触发滚动效果。 这样,当游戏运行时,按下空格键会生成一个随机数,并通过数字滚动效果逐渐显示出来。对应的Text组件会根据数字的变化而更新显示的内容,实现了数字滚动效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值