数字滚动原生js的三种方式

数字滚动原生js的三种方式

让数字滚动的效果简单用计时器setInterval就能轻易的实现,例如

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<h1 id="numBox" ></h1>
	</body>
	<script type="text/javascript">
		function numRunFun(num, maxNum){
			var numBox = document.getElementById("numBox");
			var num = num;
			var maxNum = maxNum;
			var timer = setInterval(function(){
				num++; // 调节速度
				if(num >= maxNum){
					numBox.innerHTML = maxNum;
					clearInterval(timer);
				} else {
					numBox.innerHTML = ~~(num);
				}
			},100); // 也可以调节速度
		}
		
		// 运行 
		 numRunFun(0, 10);
	</script>
</html>

 

 对于setInterval的缺点要从浏览器的的进程说起了, 可以查看: 从浏览器多进程到JS单线程,JS运行机制

 对于setInterval和setTimeout对浏览器的影响, 还可以查看:  js中setTimeout和setInterval性能详解

 

对于setInterval的缺点,所以要用setTimeout来模拟setInterval

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<h1 id="numId"></h1>
	</body>
	<script type="text/javascript">
		/**
		 * 数字滚动
		 * @param {Object} num
		 * @param {Object} maxNum
		 */
		function numRunFun(num, maxNum) {		
			var num = num;
			var maxNum = maxNum;
			var numId = document.getElementById("numId");
			// 利用setTimeout模拟Interval
			function numSlideFun(){
				num++; // 调节速度 可以小数
				if(num >= maxNum){
					numId.innerHTML = maxNum;
					return;
				}else{
					numId.innerHTML = ~~(num);
					setTimeout(function(){	// 利用setTimeout模拟setInterval				
						return numSlideFun();
					},100);// 也可以调节速度				
				}
			}
			numSlideFun();
		}
		// 运行
		numRunFun(0, 10);
	</script>
</html>

 

对于H5有了新的解决方案 window.requestAnimationFrame() 方法,为js动画的首选

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<h1 id="num" ></h1>
	</body>
	<script type="text/javascript">
		var numBox = document.getElementById('num');
		/**
		 * 数字滚动
		 * @param {Object} num 		开始值
		 * @param {Object} maxNum	最大值,最终展示的值
		 */
		function numRunFun(num,maxNum){
			var numText = num;
			var golb; // 为了清除requestAnimationFrame
			function numSlideFun(){
				numText+=1; // 速度的计算可以为小数
				if(numText >= maxNum){
					numText = maxNum;	
					cancelAnimationFrame(golb);
				}else {
					golb = requestAnimationFrame(numSlideFun);
				}
				numBox.innerHTML = ~~(numText)
				
			}
			numSlideFun();
		}
		// 运行
		numRunFun(0,10)
	</script>
</html>

对于window.requestAnimationFrame的讲解可以查看  window.requestAnimationFrame讲解

 

 

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值