幸运大抽奖

简介: 幸运大抽奖全新来袭,现在普遍的抽奖活动都是由flash开发的,然而,今天向大家展示由js实现的抽奖。早在2012年的时候写过一篇文章关于js抽奖的《javascript 抽奖》 。  借助raphaeljs插件实现,官网:http://raphaeljs.com          中文文档: http://lab.julying.com/raphael-js/docs/                                  幸运大抽奖已两种方式展现,一种是圆盘旋转(猎豹式),另一种是指针旋转(考拉式),实现抽奖三部曲。

幸运大抽奖全新来袭,现在普遍的抽奖活动都是由flash开发的,然而,今天向大家展示由js实现的抽奖。早在2012年的时候写过一篇文章关于js抽奖的《javascript 抽奖》 。  

借助raphaeljs插件实现,官网:http://raphaeljs.com          中文文档: http://lab.julying.com/raphael-js/docs/                                  

幸运大抽奖已两种方式展现,一种是圆盘旋转(猎豹式),另一种是指针旋转(考拉式),实现抽奖三部曲。

第一部:绘制圆盘和指针。

var r = Raphael("test",300,300);
// 绘制圆盘
r.image("pan.jpg",0,0,300,300);
// 绘制指针
r.image("pointer.png",145,0,10,150);

 

第二部:圆盘旋转(猎豹式)。

btn.click(function(){
    // 清空中奖结果
    result.html("");  
    // 清空画布
    r.clear();
    // 重新绘制圆盘和指针
    pan = r.image(pic,0,0,300,300);
    r.image(pointer,145,0,10,150);
    // 选中角度
    var angle = -parseInt(Math.random()*3000+6000);
    // 中奖结果
    var tmp = Math.abs(parseInt(((angle-30)%360)/60))+1;
    pan.animate({transform: "r" + angle}, 1000, ">",function(){
         result.html("恭喜您获得"+tmp+"奖");
    });
});

 


第三部:指针旋转(考拉式)。

btn.click(function(){
    // 清空中奖结果
    result.html("");
    // 设置暂停、计数、角度、中奖结果
    var stop=null,
        index = 0,
        angle= parseInt(Math.random()*360),
        tmp =Math.abs(parseInt(((angle+30)%360)/60))+1;
    // 清空画布,重新绘制圆盘和指针
    r.clear();
    r.image(pic,0,0,300,300);
    point = r.image(pointer,145,0,10,150);
    // 中奖结果
    stop = setInterval(function(){
        index++;
        if(index>=angle){
            clearInterval(stop); 
            result.html("恭喜您获得"+tmp+"奖");
        }
        point.rotate(1,150,150);  
    },100);
});


用到raphaeljs中五个方法有image、animate、transform、rotate、clear,搞定。

生活版:抽奖圆盘式先加速中急速后减速的效果。感兴趣的朋友可以改进以上的代码,用到实际项目中。




DEMO:

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>幸运大抽奖</title> <style> *{margin: 0;padding: 0;} .main{width:960px; margin: 0px auto;} .main .title{color: #f00; font-size: 50px;font-weight:bold;text-align: center; text-shadow: 3px 1px 6px #f60; padding: 30px 0px;} .main .block{overflow: hidden;} .main .blockLt{float: left;width:480px; text-align: center;} .main .blockBtn{} .main .blockBtn input{width: 100px; height: 30px; line-height: 30px; font-size: 16px; cursor: pointer;} .main .blockBtn p{margin: 20px auto 0px;} .main .blockPan{width: 300px; height: 300px; margin: 10px auto; overflow: hidden;} .main .blockRes{} </style> </head> <body> <div class="main"> <div class="title">幸运大抽奖</div> <div class="block"> <div class="blockLt"> <div class="blockBtn"> <input id="btnOne" type="button" value="抽奖"> <p>================圆盘转动(猎豹式)================</p> </div> <div id="testOne" class="blockPan"></div> <div id="resultOne" class="blockRes"></div> </div> <div class="blockLt"> <div class="blockBtn"> <input id="btnTwo" type="button" value="抽奖"> <p>================指针转动(考拉式)================</p> </div> <div id="testTwo" class="blockPan"></div> <div id="resultTwo" class="blockRes"></div> </div> </div> </div> <script src="http://files.cnblogs.com/kuikui/jquery-1.10.2.min.js"></script> <script src="http://files.cnblogs.com/kuikui/raphael.js"></script> <script> $(function(){ var btnOne = $("#btnOne"), btnTwo = $("#btnTwo"), resultOne = $("#resultOne"), resultTwo = $("#resultTwo"), pic = "http://images.cnblogs.com/cnblogs_com/kuikui/354173/o_pan.jpg", pointer = "http://images.cnblogs.com/cnblogs_com/kuikui/354173/o_pointer.png"; var rOne = Raphael("testOne",300,300); var panOne = rOne.image(pic,0,0,300,300); rOne.image(pointer,145,0,10,150); btnOne.click(function(){ resultOne.html(""); rOne.clear(); panOne = rOne.image(pic,0,0,300,300); rOne.image(pointer,145,0,10,150); var angle = -parseInt(Math.random()*3000+6000); var tmp = Math.abs(parseInt(((angle-30)%360)/60))+1; panOne.animate({transform: "r" + angle}, 1000, ">",function(){ resultOne.html("恭喜您获得"+tmp+"奖"); }); }); var rTwo = Raphael("testTwo",300,300); rTwo.image(pic,0,0,300,300); var point = rTwo.image(pointer,145,0,10,150); point.rotate(0,150,150); btnTwo.click(function(){ resultTwo.html(""); var stop=null, index = 0, angle= parseInt(Math.random()*360), tmp =Math.abs(parseInt(((angle+30)%360)/60))+1; rTwo.image(pic,0,0,300,300); point = rTwo.image(pointer,145,0,10,150); stop = setInterval(function(){ index++; if(index>=angle){ clearInterval(stop); resultTwo.html("恭喜您获得"+tmp+"奖"); } point.rotate(1,150,150); },100); }); }); </script> </body> </html>

目录
相关文章
|
10月前
|
SQL 存储 关系型数据库
多态性在面向对象编程中的应用场景
多态性是面向对象编程的核心特性之一,允许使用同一接口表示不同类型的对象,提高代码的灵活性和可扩展性。常见应用场景包括:方法重写、接口实现、抽象类等,通过多态可以轻松管理复杂系统,实现软件组件的松耦合。
355 5
|
6月前
|
数据采集 监控 安全
电商项目中如何选择安全高效的电商数据采集API接口?
选择电商项目数据采集接口时,需综合考虑需求、性能、安全性、成本和合规性等因素。如果平台提供官方API,优先选择API接口;如果没有API或API无法满足需求,可以考虑网页抓取或其他数据采集方式。在实际操作中,建议进行充分测试和监控,确保数据采集的稳定性和准确性。
|
存储 移动开发 应用服务中间件
H5漂流瓶交友源码|社交漂流瓶H5源码 附安装教程
H5漂流瓶交友源码|社交漂流瓶H5源码 附安装教程
300 2
|
8月前
|
人工智能 安全 调度
《鸿蒙NEXT端云垂直整合架构——算力协同调度的智慧引擎》
鸿蒙NEXT通过创新的端云垂直整合架构,实现硬件与云端深度融合,支持高效的算力协同调度。该架构具备智能的算力感知与分配能力,能根据任务需求灵活调配端侧和云端资源,确保实时性和高性能。同时,端云协同的模型训练与优化机制加快了模型迭代,提升了性能。此外,星盾安全架构保障了数据传输和算力调度的安全可靠性。这不仅为用户带来智能、流畅的体验,也为开发者提供了高效开发环境,推动AI技术在鸿蒙生态中的广泛应用。
277 18
|
11月前
|
存储 运维 前端开发
如何自己搭建一个网站?
‌确定需求和目标‌:在开始搭建网站之前,明确网站的需求和核心,网站主要是什么途径:展示产品或服务、提供信息和资源、增加销售、提升品牌形象等。
553 3
|
存储 缓存 Ubuntu
Docker详解:如何创建运行Memcached的Docker容器
Docker详解:如何创建运行Memcached的Docker容器
175 0
|
关系型数据库 PostgreSQL
postgresql如何将没有关联关系的两张表的字段合并
【6月更文挑战第2天】postgresql如何将没有关联关系的两张表的字段合并
313 3
|
JSON 开发工具 数据格式
基于Python开发的开心麻花影视作品分析系统(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的开心麻花影视作品分析系统(源码+可执行程序+程序配置说明书+程序使用说明书)
195 0
CSS3 背景图片显示尺寸(放大/缩小背景图)(background-size) (背景适配 自适应)
CSS3 背景图片显示尺寸(放大/缩小背景图)(background-size) (背景适配 自适应)
341 0
|
存储 算法 Java
使用keytool 生成证书
keytool 简介 keytool 是java 用于管理密钥和证书的工具,官方文档其功能包括: 创建并管理密钥 创建并管理证书 作为CA 为证书授权 导入导出证书 主要格式keytool 采用 keystore 文件来存储密钥及证书,其中可包括私钥、信任证书;keystor...
7830 0