抽奖,跑马灯


分享自己写的跑马灯抽奖。
    
    

      
        
            

      
     1 2 3
     8  4
     7  6 5

效果

css

    <style type="text/css">
        #tbroundel        {
        width:210px;
        height:210px;
        
            }
    #tbroundel td    {
        width:70px;
        height:70px;
        text-align:center;

        
        }
        #RunDraw        {
         padding:0;
            text-align:center;
            }
        #RunDraw input       {
           width:100%;
           height:100%;
           margin:0;
           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>
时间: 2024-10-27 12:12:34

抽奖,跑马灯的相关文章

js抽奖跑马灯程序

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

跑马灯抽奖,本地图片简单实现

公司要做个抽奖功能,写了两个demo,这个是使用本地图片的跑马灯抽奖.加载的本地图片,这种的比较简单.想“跑”起来原理也很简单.      一个是控制好线程sleep时间,sleep时做图片的变换,变换指的就是用滚动的图片依次替换下一个图片.      再一个就是图片的定位,这个根据当前图片位置就可以精确计算了,比用WheelView做的老\虎\机容易定位.      我还添加了SoundPool 让每次变动都有一个声音,这样更像游戏. 注意额:跑马灯还可以做成网络图片版本,稍微复杂一点,处理好

九宫格跑马灯抽奖

九宫格跑马灯抽奖 下载使用 var myLuck = new Luck("luckStage"); myLuck.run(function (){ //do something });

常见的跑马灯 动图 抽奖的案例

//抽奖的案例 <script type="text/javascript"> var alldata = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; var alldataarr = alldata.split(","); var num = alldataarr.length - 1; var timer; function start() { clearInter

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

目前好多的微信活动都有一些抽奖活动,其中就有跑马灯. <!DOCTYPE html> <html> <head> <title>跑马灯效果</title> <style> table .pao{ border:1px solid #e5e5e5; padding:10px 20px; } table .on{ border-color:red; color:red; } </style> <script> wi

JavaScript “跑马灯”抽奖活动代码解析与优化(一)

最近的项目中做了一个"跑马灯"的抽奖特效插件.上篇文章已经分享过html和css 的相关知识.这篇文章主要分享一些 JavaScript 相关的知识.这几天在写这篇文章的时候,也顺便把自己的代码重构了一下. 这里主要是来写写自己的优化过程.俗话说: 一个程序猿的进步是从对自己的代码不满意开始的. 开始之前先来看上篇文章遗漏的两个问题和几个知识点,是自己重构的过程中需要用到的: 1.移动端1px像素线的问题 对于设计师给我的手机端网页的设计稿都是2倍图.按照道理来说,在写网页的时候,所有

canvas九宫格跑马灯

canvas九宫格跑马灯抽奖 之前用dom写了一版,部分 安卓机会卡顿,换用canvas dom版本九宫格抽奖

关于跑马灯的体会

1. android:singleLine="true"虽然被不建议使用,但是跑马灯必须是它.如果改为android:maxLines="1",不能实现跑马灯效果. 2. android:marqueeRepeatLimit="marquee_forever" 是否使用,没关系. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android仿京东首页轮播文字(又名垂直跑马灯)

Android仿京东首页轮播文字(又名垂直跑马灯) 京东客户端的轮播文字效果: 本次要实现的只是后面滚动的文字(前面的用ImageView或者TextView实现即可),看一下实现的效果 实现思路 上图只是一个大概的思路,要实现还需要完善更多的细节,下面会一步步的来实现这个效果: 1.封装数据源:从图上可以看到,轮播的文字是分为两个部分的,暂且把它们分别叫做前缀和内容,而且实际的使用过程中点击轮播图肯定是需要跳转页面的,而且大部分应该是WebView,不妨我们就设置点击时候需要获取的内容就是一个