分享自己写的跑马灯抽奖。
HTML代码 
<!--首先将一个div的背景设为一个圆形--> <div style=" width:240px; height:232px; background-image:url(Roundel.png);">
<!--再在中间放一个div用margin搞到中间去--> <div style=" width:210px; height:210px; margin:15px 11px 15px 11px;">
<!-- 再在div里放table充满 -->
<!--HTML代码,就是建立一个table设成这个样子,给存放奖品的td加一下统一的name--> <table id="tbroundel">
<tr>
<td name="roundelgoods" id="turn1" >1</td><td name="roundelgoods" id="turn2" >2</td><td name="roundelgoods" id="turn3" >3</td>
</tr> <tr>
<td name="roundelgoods" id="turn8" >8</td><td id="RunDraw"><input id="btnrun" type="button" value="开始" onclick="startup()" /></td><td name="roundelgoods" id="turn4" >4</td>
</tr>
<tr>
<td name="roundelgoods" id="turn7" >7</td><td name="roundelgoods" id="turn6" >6</td><td name="roundelgoods" id="turn5" >5</td>
</tr>
</table>
</div> </div>

效果

css

    <style type="text/css">
#tbroundel
{
width:210px;
height:210px; }
#tbroundel td
{
width:70px;
height:70px;
text-align:center; }
#RunDraw
{
padding:;
text-align:center;
}
#RunDraw input
{
width:100%;
height:100%;
margin:;
background-color:Red;
} </style>

js算法

    <script type="text/javascript">

        var t; ///用它存放setinterval,不用扣得太细,因为只要用到setinterval最后就得用     window.clearInterval(t);去释放他
var index = 1;/////这个用来记录当前循环的次数,比如点了抽奖要转四圈,每转一圈有8个奖品,那一共就要循环8*圈数
var circles = 1;////抽奖要转的圈数
var currentcircles = 1; ///记录当前是第几圈setinterval的第二个参数,通过操纵他来实现变速
var speed = 0;/////转动的速度,用它作为
var endpoint = 0; /////最后停止的位置,即选中了谁
////抽奖开始
function startup() {
///点一次抽奖过程中按钮禁用
document.getElementById("btnrun").disabled = true; /////随机生成圈数,要跑几圈,不要太少了,太少了看着就不舒服。这里是生成4-14以内的随机整数
circles = Math.round(Math.random() * 10 + 3);
/////终结点,生成1-8之内的随机数,因为你一圈有8个奖品
endpoint = Math.round(Math.random() * 8); ////当前的圈数
currentcircles = 1;
////速度,谁的太高了会很慢
speed = 700;
////当前循环的次数
index =1;
/////取得放奖品的<td>的数组
var goods = document.getElementsByName("roundelgoods");
////存放奖品的<td>的数组
var drawturn = [];
////遍历加入到drawturn数组里
for (var i = 0; i <(8); i++) {
// document.getElementById("turn" + (i + 1)).style.border = "0";
////加入时把他们的样式置为初始样式
document.getElementById("turn" + (i + 1)).style.fontSize = "large";
document.getElementById("turn" + (i + 1)).style.color = "black";
///push方法,向数组内追加一个元素
drawturn.push(document.getElementById("turn"+(i+1)));
} ////开始循环
t= setInterval(HighTurn,speed);
} ///循环奖品方法
function HighTurn() { /////如果当前循环次数大于1,则当前循环说明不是1号奖品,那就得吧这个奖品的前一个兄弟的样式设为初始值
if (index > 1) {
/////当然如果这时候index除以8余数为1的话说明这时至少循环完一圈且刚好又循环到1号奖品了,这就不能用(数组下标-1)的方法去清除样式了,因为他的前一位是上一次循环的8号奖品
if ((index % 8) == 1) {
// document.getElementById("turn8").style.border = "0
document.getElementById("turn8").style.fontSize = " large";
document.getElementById("turn8").style.color = "black";
}
////如果不是的话就好说了,直接(数组下标-1)清除样式
else {
//document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.border = "0";
document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.fontSize = " large";
document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.color = "black";
// document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.border = "3px solid #ccc";
}
}
////处理完前一个商品的样式后再来改变当前奖品的样式——大号字体,红色
document.getElementById("turn" + (index - (8 * (currentcircles - 1)))).style.fontSize = " xx-large";
document.getElementById("turn" + (index - (8 * (currentcircles - 1)))).style.color = "red"; ///完事之后判读现在的循环次数除以8的余数是否为0,如果为零则说明一次循环已经到了最后一个奖品,接下来要进入下一圈了(不需要考虑第一次循环的,因为index的初始值是1,1/8不为0)
if ((index % 8) == 0) {
// 进入下一圈就得当前圈数+1
currentcircles++;
}
///然后循环次数+1,不要把它放到圈数加1的前面去
index++;
///这里用来改变速度,在下设定的规则是在第一圈是每经过一个奖品则速度+80,setInterval的第二个参数是多长时间执行一次的意思,所以值越小,执行的频率越高
if (currentcircles == 1) {
///注意了,我就是因为没写这句话被闷了好半天,不写他的话你的程序会一直在跑setInterval释放不了。因为改变了setInterval的参数要让他生效的话就得重新执行(我也不懂,但是试了一下这样好使)。所以先把之前的清一下
window.clearInterval(t);
///改变速度
speed -= 80;
///在重新执行
t = setInterval(HighTurn, speed);
}
///在下设定的在最后一圈的时候开始减速
else if (currentcircles == circles ) {
window.clearInterval(t);
speed += 80;
t = setInterval(HighTurn, speed);
} ////用来判断是否循环完了,如果当前圈数==要循环的圈数,且当前循环到的奖品编号==终结点则判定为循环结束,最终会停在终结点位置的奖品上
if (circles == currentcircles && ((index - 1) % 8) == endpoint) {
///清除setInterval
window.clearInterval(t);
///回复按钮使用
document.getElementById("btnrun").disabled = false;
alert("恭喜抽中了" + endpoint + "号奖品");
return;
} } </script>

js抽奖,跑马灯的更多相关文章

  1. js抽奖跑马灯程序

    js抽奖跑马灯程序 点击下载代码

  2. JS实现跑马灯效果(向左,向上)

    <html> <head> <title>JS实现跑马灯效果</title> <style> * { font-size:12px; fon ...

  3. 原生js实现跑马灯抽奖效果

    目前好多的微信活动都有一些抽奖活动,其中就有跑马灯. <!DOCTYPE html> <html> <head> <title>跑马灯效果</ti ...

  4. js文字跑马灯

    实现文字跑马灯效果,主要控制scrollLeft. 效果图如下 代码如下 <html> <head> <script type="text/javascript ...

  5. js之跑马灯广告

    目标效果:每过1秒重复把广告的第一个字符放到最后,达到动态跑马灯效果 代码如下: <!DOCTYPE html> <html lang="en"> < ...

  6. JS实现跑马灯效果(鼠标滑入可暂停,离开继续跑)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. js代码跑马灯效果-----轮播图字效果!

    文字元素: <p id="yc-msg">你有本事来打我呀!</p> js执行代码: function ycMsg() { // 获取 标签 var pOb ...

  8. js图片跑马灯效果

    <style. type="text/css">body{margin:0px auto; padding:0px;}ul,li{margin:0px; padding ...

  9. JS跑马灯

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML>  <HEA ...

随机推荐

  1. list-style-type:none是加在ul还是li中呢?

    很多时候我们都需要多对列表元素进行初始化,方法是给列表元素添加list-style-type: none,但作为小白的我是经常纠结一个问题:是把它加在ul中还是li中呢 我试了一下,加在ul和li都能 ...

  2. python手撸桌面计算器

    网上有一些许多关于计算器的源码,但我似乎不太care 一直寻思着自己手撸一个才有意思,于是这就开始了 实现功能: 1.基本的两个数 +-x÷ 运算以及取反,百分之,平方等 2.支持连续运算 3.暂不支 ...

  3. 【转帖】赤壁之战,曹操大败只因缺了Service Mesh

    赤壁之战,曹操大败只因缺了Service Mesh 本文作者把微服务向 Service Mesh 的进化融入到了三国故事中,妙趣横生.故事比较长,大家慢慢看,精彩的在后边. http://develo ...

  4. [转帖]Breeze部署kubernetes1.13.2高可用集群

    Breeze部署kubernetes1.13.2高可用集群 2019年07月23日 10:51:41 willblog 阅读数 673 标签: kubernetes 更多 个人分类: kubernet ...

  5. SQLite基础-8.子句(二)

    目录 SQLite子句(二) 1. GROUP BY子句 2. HAVING子句 3. LIMIT 子句 4. IF EXISTS 和 IF NOT EXISTS 子句 SQLite子句(二) 1. ...

  6. 【LOJ】#3094. 「BJOI2019」删数

    LOJ#3094. 「BJOI2019」删数 之前做atcoder做到过这个结论结果我忘了... em,就是\([1,n]\)之间每个数\(i\),然后\([i - cnt[i] + 1,i]\)可以 ...

  7. 【计算机网络】-网络层-Internet的网络层

    [计算机网络]-网络层-Internet的网络层 Internet是一组相互连接的网络或者自治系统的集合 Internet 1.存在几个主要骨干网络,骨干网络是由高带宽的线路和快速路由器构成 2.这些 ...

  8. A/B HDU-1576(简单的数论题)

    Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). Input 数据的第一 ...

  9. PAT A1077 Kuchiguse (20)

    晴神书中AC代码 #include <cstdio> #include <cstring> #include <iostream> using namespace ...

  10. # MATLAB数据处理

    目录 MATLAB数据处理 数据归一化处理 冒号的作用(获取指定行列的数据) MATLAB数据处理 mean(A,(b)) %均值函数,b为设置对哪一维上的数据进行处理,默认为第一维(列),行为第二维 ...