原生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>
window.onload = function(){
    var paomadeng = {
        currentIndex : 1, //当前索引
        indexCount : 12, //个数
        timer : 0, //定时器
        currentCycle : 0, //当前圈数
        cycles : 4, //跑的圈数
        speed : 400, //速度,即定时器的时间间隔
        key : 0, //钥匙,随机数
        btn : 0, //触发按钮
        classPrefix : "pao-", //元素类名class前缀

        reset : function(){
            //触发对象
            paomadeng.btn = this;
            paomadeng.btn.style.display = "none";

            clearInterval(paomadeng.timer);
            paomadeng.currentCycle = 0;
            paomadeng.speed = 400;
            paomadeng.key = Math.ceil(Math.random() * paomadeng.indexCount);
            console.log("key:" + paomadeng.key);

            paomadeng.run();
        },
        run : function(){
            console.log("speed:" + paomadeng.speed);

            var before = paomadeng.currentIndex == 1 ? paomadeng.indexCount : paomadeng.currentIndex - 1;

            //设置上一索引的类名
            var beforeNode = document.getElementsByClassName(paomadeng.classPrefix + before)[0];
            var beforeClassNewName = beforeNode.className.replace("on","");
            beforeNode.className = beforeClassNewName;
            //设置当前索引的类名
            var currentNode = document.getElementsByClassName(paomadeng.classPrefix + paomadeng.currentIndex)[0];
            currentNode.className += " on"; //注意前面有空格

            paomadeng.upSpeed();
            paomadeng.downSpeed();

            paomadeng.currentIndex += 1;
            paomadeng.currentIndex = paomadeng.currentIndex > paomadeng.indexCount ? 1: paomadeng.currentIndex;
        },
        //加速
        upSpeed : function(){
            //前2圈且speed>100时加速
            if(paomadeng.currentCycle < 2 && paomadeng.speed > 100){
                paomadeng.speed -= 5 * paomadeng.currentIndex ;
                paomadeng.stop();
                paomadeng.start();
            }
        },
        //增加圈数 并 减速
        downSpeed : function(){
            //增加圈数
            if(paomadeng.currentIndex == paomadeng.indexCount){
                paomadeng.currentCycle += 1;
            }

            //如果当前所跑圈数小于总圈数-1 并且 速度小于400,那么减速
            if(paomadeng.currentCycle > paomadeng.cycles-1 && paomadeng.speed < 400){
                paomadeng.speed += 20;
                paomadeng.stop();
                paomadeng.start();
            }

            //如果当前所跑圈数大于总圈数 且 索引值等于key,那么停止奔跑
            if(paomadeng.currentCycle > paomadeng.cycles && paomadeng.currentIndex == paomadeng.key){
                paomadeng.stop();
                paomadeng.showPrize();
            }
        },
        stop : function(){
            clearInterval(paomadeng.timer);
        },
        start : function(){
            paomadeng.timer = setInterval(paomadeng.run , paomadeng.speed);
        },
        showPrize : function(){
            //过一会再显示提示信息
            setTimeout(function(){
                alert("恭喜,你中了" + paomadeng.key + "等奖");
                paomadeng.btn.style.display = "block";
            },700);

        }
    };
    document.getElementById("startPao").onclick= paomadeng.reset;
};
</script>
</head>

<body>
<div class="container">
<table>
    <tr>
        <td class="pao pao-1">1</td>
        <td class="pao pao-2">2</td>
        <td class="pao pao-3">3</td>
        <td class="pao pao-4">4</td>
    </tr>
    <tr>
        <td class="pao pao-12">12</td>
        <td class="pao"></td>
        <td class="pao"></td>
        <td class="pao pao-5">5</td>
    </tr>
    <tr>
        <td class="pao pao-11">11</td>
        <td class="pao"></td>
        <td class="pao"></td>
        <td class="pao pao-6">6</td>
    </tr>
    <tr>
        <td class="pao pao-10">10</td>
        <td class="pao pao-9">9</td>
        <td class="pao pao-8">8</td>
        <td class="pao pao-7">7</td>
    </tr>
</table>
<br/>
<input type="button" value="开始跑" id="startPao" />
</div>
</body>
</html>
时间: 2024-11-20 11:33:30

原生js实现跑马灯抽奖效果的相关文章

跑马灯小效果

今天在项目中需要一个图片跑马灯的效果 , 就用js写了一个 直接上代码吧: css代码: *{margin:0;padding:0;} .clearfix:after { content: ""; display: table; clear: both; } .clearfix: { *zoom: 1; } #div1{ width:1200px;height:200px;margin:100px auto;position:relative;background:red; overf

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

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

自定义TextView使之具有跑马灯的效果

一.问题的引入 使用普通的textview跑马的效果,一开始没有焦点事件不会进行滚动,button有焦点事件,但是比较难看,因此需要自定一个TextView 一出生就有焦点 然后需要自定义一个textview FocusedTextView.java package com.xuliugen.mobilesafe.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Vi

Android:TextView文字跑马灯的效果实现

解决TextView文字显示不全的问题. 简单设置跑马灯的效果: <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" androi

android使用TextView实现跑马灯的效果(1)

android使用TextView实现跑马灯的效果 1.activity_main.xml <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

九宫格跑马灯抽奖

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

在ListView或GridView 中使用到跑马灯滚动效果实现的问题。

一般情况下TextView实现跑马灯效果只要设置一些几个属性即可实现了. android:singleLine="true"//只显示单行 android:ellipsize="marquee"       //实现滚动效果 android:focusable="true"    //获取焦点,获取不到焦点是无法实现跑马灯滚动的 android:marqueeRepeatLimit="marquee_forever"  //

原生JS实现简易转盘抽奖

我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述HTML与CSS,而JS基本每行都有注释,但这里CSS 也是起到了至关重要的一步,那就是控制背景色,以及结果的显示与隐藏,效果先给出,如下: 代码给出: <!DOCTYPE html> <html lang="zh"> <head> <meta ch

背景音乐,嵌入式频,跑马灯滚动效果

背景音乐:在hand 中<embed src="music.mp3" hidden="true" autostart="true" loop="true" /> 嵌入视频:去视频网站上,找到分享功能,找到html代码,复制到自己的页面中,就可以了:复制过来的代码很多,但其中有width和height可以用来调节网页中视频的大小: 跑马灯效果:<marquee direction="right&quo