JS抽奖二次方缓动测试

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<style>
		.w {width:248px;}
		.l {float:left;background-color:#ffffff;border:1px solid #000000;width:60px;height:60px;}
		div.s {background-color:#dddddd}
	</style>
	<title>Document</title>
</head>
<body>
	<div class="w">
		<div id="l_1" class="l"></div>
		<div id="l_2" class="l"></div>
		<div id="l_3" class="l"></div>
		<div id="l_4" class="l"></div>
		<div id="l_12" class="l"></div>
		<div class="l"></div>
		<div class="l"></div>
		<div id="l_5" class="l"></div>
		<div id="l_11" class="l"></div>
		<div class="l"></div>
		<div class="l"></div>
		<div id="l_6" class="l"></div>
		<div id="l_10" class="l"></div>
		<div id="l_9" class="l"></div>
		<div id="l_8" class="l"></div>
		<div id="l_7" class="l"></div>
	</div>
	<script>
		var ITEM_COUNT = 12;
		var maxTime = 800;
		var minTime = 100;
		var t = 10;
		var a = (maxTime - minTime) / t;
		//获取块
		var getItem = function(index) {
			return document.getElementById("l_" + index);
		};
		var resetAll = function() {
			var items = document.getElementsByClassName("l");
			for(var i = 0 ; i < items.length ; i++) {
				items[i].className = "l";
			}
		};
		var setItemClass = function(index) {
			getItem(index).className = "l s";
		};
		var getItemNumber = function(index, min, max) {
			return Math.floor(Math.random() * (max - min + 1) + min) * ITEM_COUNT + index;
		};
		//跑马灯
		var run = function(current, totle) {
			if(!totle || totle < t * 2) {
				throw new Error("run length is so short!");
			}
			var interval = minTime;
			if(current < t) {
				//interval = maxTime - a * current;
				var c = current;
				interval = maxTime + (maxTime - minTime) * (c /= t) * (c - 2);
			} else if(current + t > totle) {
				//interval = minTime + (t - totle + current) * a;
				var c = t - totle + current;
				interval = minTime + (maxTime - minTime) * (c /= t) * c;
			} else {
				interval = minTime;
			}
			console.log(interval);
			
			//运行效果
			resetAll();
			setItemClass((current) % ITEM_COUNT + 1);
			//结束条件
			if(current >= totle) {
				return;
			}
			//匿名函数
			var nextFunc = arguments.callee;
			//递归
			setTimeout(function() {
				nextFunc(current + 1, totle)
			}, interval)
		};
	</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值