web建站教程
  1. 首页
  2. vuejs
  3. js
  4. 好玩
  5. AIGC工具
  6. 前端知识
  7. 百度echarts
  8. 更多
    php入门
    nodejs
    mockjs
    reactjs
    mysql
    wordpress
    织梦cms
    帝国cms
    git教程
    IT知识
    模板大全
    休息站
    手机应用

js数字滚动效果

932 ℃

1、css代码

.scroll-nums {
	box-sizing:border-box;
	width:100%;
	height:200px;
	text-align:center;
	padding-top:50px;
	display:flex;
	flex-wrap:wrap;
	justify-content:center;
	align-items:center;
}
.scrollNums,.scrollNums2 {
	width:100%;
	margin:25px;
}
.number-animate {
	line-height:45px;
	height:45px;
	font-size:40px;
	overflow:hidden;
	display:inline-block;
	position:relative;
}
.number-animate .number-animate-dot {
	width:21px;
	float:left;
	text-align:center;
}
.number-animate .number-animate-dom {
	width:27px;
	text-align:center;
	float:left;
	position:relative;
	top:0;
}
.number-animate .number-animate-dom span,.number-animate .number-animate-dot span {
	float:left;
	width:100%;
	height:45px;
	line-height:1.1;
}
.scrollNums .number-animate .number-animate-dom {
	background:#ab0003;
	color:#fff;
	border-left:1px solid #fff;
}
.scrollNums2 .number-animate .number-animate-dom {
	background:#222;
	color:yellow;
	border-left:1px solid #fff;
}

2、html代码

<div class="scroll-nums">
	<div class="scrollNums"></div>
	<div class="scrollNums2"></div>
</div>

3、js插件

const scrollNums = (function(win,doc) {
  class scrollNumsFn {
    constructor(x, y) {
      this.setting = {
          len : null, //默认最小位数
          speed : 1000,//动画速度
          num : "", //初始化值
          symbol : '',//默认的分割符号,千,万,千万
          dot : 0 ,//保留几位小数点 
          zero : true
      }
      this.$parent = doc.querySelector(x);
      this.html = `<div class="number-animate-dom" data-num="{{num}}">
            <span class="number-animate-span">0</span>
            <span class="number-animate-span">1</span>
            <span class="number-animate-span">2</span>
            <span class="number-animate-span">3</span>
            <span class="number-animate-span">4</span>
            <span class="number-animate-span">5</span>
            <span class="number-animate-span">6</span>
            <span class="number-animate-span">7</span>
            <span class="number-animate-span">8</span>
            <span class="number-animate-span">9</span>
            <span class="number-animate-span">0</span>
            <span class="number-animate-span">.</span>
          </div>`;
      this.extend( this.setting, y );
      this.init(this.$parent,y)
    }
    init (x,y){
      x.innerHTML =  this.setNumDom(this.numToArr(this.setting.num))
      this.animate(x);
    };
    animate ($parent){//执行动画
      let $dom = $parent.querySelectorAll( '.number-animate-dom' );
      for(let o of $dom ){
        let num = o.getAttribute('data-num');
        if(this.setting.zero) num = (num==0?10:num);
        this._height = o.offsetHeight/12;  
        o.style['transform'] = o.style['-webkit-transform'] = 'translateY(' + (num=="." ? -11 * this._height  : -num * this._height)+'px)';
        o.style['transition'] = o.style['-webkit-transition'] = (num=="." ?  0 : this.setting.speed/1000)+'s'
      }
    }
    setNumDom (arrStr){//分割符号
      let shtml = '<div class="number-animate">';
      arrStr.forEach((o,i)=>{
        if(i != 0 && (arrStr.length-i)%3 == 0 && this.setting.symbol != "" && o!="."){
            shtml += '<div class="number-animate-dot"><span>'+this.setting.symbol+'</span></div>'+this.html.replace("{{num}}",o);
        }else{
            shtml += this.html.replace("{{num}}",o);
        }
      });
      shtml += '</div>';
      return shtml;
    }
    update (num){
      let newArr = this.numToArr(num),$dom = this.$parent.querySelectorAll(".number-animate-dom");
      if($dom.length != newArr.length){
        this.$parent.innerHTML = this.setNumDom(this.numToArr(num))
      }else{
        ;[].forEach.call($dom,(o,i)=>{
            o.setAttribute('data-num',newArr[i]);
        });
      }
      this.animate(this.$parent);
    }
    numToArr (num){
      num = parseFloat(num).toFixed(this.setting.dot);
      let arrStr = typeof(num) == 'number' ? num.toString().split("") : num.split("")
      let arrLen = arrStr.length;
      if(arrStr.length <=this.setting.len){
        for(let _lens = 0;_lens<this.setting.len - arrLen;_lens++){
          arrStr.unshift(0)
        }
      }
      return arrStr;
    }
    extend (n,n1){ 
      for(let i in n1){n[i] = n1[i]};
    }
  }
  return scrollNumsFn;
})(window,document);

4、方法引用

//这是避免代码在合并压缩时产生错误,所以在代码开始部分就先写上;会比较保险
;(function(){
	var num = 1234567,num2 = 8872
	var scrollNums1 = new scrollNums('.scrollNums',{
		num : num
	});
	var scrollNums2 = new scrollNums('.scrollNums2',{
		num : num2
	});
	setInterval(()=>{
		num +=15,scrollNums1.update(num);
		num2 +=4,scrollNums2.update(num2);
	},2000)
})();

原生js如何判断图片是否存在

js如何实现一个左滑删除功能(附代码)

js创建一个指定长度数组(根据数字显示数组长度)

利用es6语法判断字符串是否为数字

javaScript数字格式化方法介绍

标签: js插件, queryselectorAll, 数字, 数字滚动

上面是“js数字滚动效果”的全面内容,想了解更多关于 js 内容,请继续关注web建站教程。

当前网址:https://ipkd.cn/webs_2126.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

当前位置: 网站首页 > js
本文共计3698个字,预计阅读时长25分钟
Trae:新一代免费的AI编程工具

基金从业资格考试题库

一站式备考基金从业资格考试,收录2021-2025年模拟题库!呱呱工具箱

AI工作站

收录全球3800+ 款各行各业AI应用,轻轻松松做事!
生活小工具,收录了80多款小工具
上一篇: 推荐一个可以查询老黄历的网站,可以根据五行取名!
下一篇: 详细介绍HTTP状态码不同之处的原因(什么原因导致的)
x 打工人ai神器