1. 程式人生 > >js:九宮格抽獎

js:九宮格抽獎

專案需要實現一個九宮格抽獎的模板,當然是微信小程式版本的,但是現在有點時間,就整理了個js版本的(相容性,使用jq的dom操作)

當然,不喜歡用jq的同學可以直接使用document來操作,如果不喜歡dom操作的,就移步下一篇部落格的微信小程式版本的

程式碼如下:

<!DOCTYPE html>
<html>
	<style>
		li {
			width: 200px;
			height: 200px;
		}
		
		.ul {
			width: 606px;
			height: 606px;
		}
		
		.ul li {
			float: left;
			border: 1px solid #000000;
			list-style: none;
			line-height: 200px;
			text-align: center;
			font-size: 50px;
		}
	</style>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
		<div class="ul">
			<li class="li1">1</li>
			<li class="li2">2</li>
			<li class="li3">3</li>
			<li class="li8">8</li>
			<li class="listart">開始</li>
			<li class="li4">4</li>
			<li class="li7">7</li>
			<li class="li6">6</li>
			<li class="li5">5</li>
		</div>
		<script type="text/javascript" src="js/jquery-1.12.4.js"></script>
		<script>
			var last_index = 0, //上一回滾動的位置
				amplification_index = 0, //輪盤的當前滾動位置,0表示為第一次
				roll_flag = true, //是否允許滾動
				max_number = 8, //輪盤的全部數量
				speed = 300, //速度,速度值越大,則越慢 初始化為300
				finalindex = 3, //最終的獎勵
				myInterval = "", //定時器
				max_speed = 40, //滾盤的最大速度
				minturns = 8, //最小的圈數為2
				runs_now = 0; //當前已跑步數
			$(".listart").bind("click", function() {
				//初始化步數
				runs_now = 0;
				//當前可以點選的狀態下
				if(roll_flag) {
					roll_flag = false;
					//啟動滾盤,注,若是最終後臺無返回就不好意思裡
					rolling();
				}
			});

			//滾動輪盤的動畫效果
			function rolling() {
				myInterval = setTimeout(function() {
					rolling();
				}, speed);
				runs_now++; //已經跑步數加一
				amplification_index++; //當前的加一
				//獲取總步數,介面延遲問題,所以最後還是設定成1s以上
				var count_num = minturns * max_number + finalindex - last_index;
				console.log(count_num);
				//上升期間
				if(runs_now <= (count_num / 3) * 2) {
					speed -= 30; //加速
					if(speed <= max_speed) {
						speed = max_speed; //最高速度為40;
					}
				}
				//抽獎結束
				else if(runs_now >= count_num) {
					clearInterval(myInterval);
					last_index = amplification_index;
					roll_flag = true;

				}
				//下降期間
				else if(count_num - runs_now <= 10) {
					speed += 20;
				}
				//緩衝區間
				else {
					speed += 10;
					if(speed >= 100) {
						speed = 100; //最低速度為100;
					}
				}
				if(amplification_index > max_number) { //判定!是否大於最大數
					amplification_index = 1;
				}

				//重新整理頁面
				var strli = ".li";
				strli += amplification_index;
				//全部清除
				$("li").each(function() {
					$(this).css("background", "#ffffff");
				})
				//畫顏色
				$(strli).css("background", "red");
			}
		</script>
	</body>

</html>
沒有多大的麻煩。而且有備註,就不多解釋了

效果圖如下: