简介:html+css+js实现带有转盘的抽奖小程序。
效果展示

抽奖方式:
飞镖
飞镖制作成飞机的模样,没人的号码用黄色标签做成云朵模样黏贴在背景板上,年会背景板缓缓移动,飞扎中的名字得奖寓意飞黄腾达。
福利彩票机
年会入场嘉宾人手一张自制。
可以哒云抽奖
创建抽奖活动后,扫描活动二维码,推广二维码,最后在拿出手机抽奖。
转盘抽奖
数字,转动三次构成一组百位数,号码对应者获奖。随着号码的逐一产生,现场配合音响效果能创造出激动人心的效果。
摘红包
把个人的电话号码写于纸上放在红包里,年会上领导随机摘取一个,然后打电话给获奖人。悬念十足,气氛紧张。
捞金
由年会上领导在箱子里放入一定数额的大额人民币,其余人用一元的纸币写上自己的名字或号码,放多少个人而定,放越多机会越多。(主持强调,付出越多收获越大)领导抽出中奖人再从准备好的三个信封抽出一个,三个信封内为:一只手,两只指,一双筷子等,然后自行捞取现金。最后被抽中的人所有奖金都归他。
藏宝图
具有设计感的小纸粘在杯碟椅子等地方上,在开party前,一张藏宝图分2份对开的,上边写着礼品号码,礼分2份的就是个号码有2分的,其中一分是真的,一分是假的,当他们找好藏宝图后必然要找另一半藏宝图才可以对奖的,在找藏宝图时就可以互动作用了,不过号码里的礼品一定要放点好玩的东西的(奶瓶,尿不湿)也放点大奖的啦,当同一张小纸合起来,就可以上换奖了,也可以拿了藏宝图的一对人交换藏宝图的,那时就会出很多笑话了。例如有人的藏宝图只找到半张纸时,他可能会看领导的杯杯碟碟的。强调团队合作的重要性。
本文采取的是转盘抽奖:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="./style.css" type="text/css" rel="stylesheet">
</head>
<style>
</style>
<body>
<!-- 首先通过分析观察可以知道这是一个双层次结构,
所以需要的是div嵌套结构 -->
<div class="outher">
<div class="wapper">
<div class="left">
<!-- 一边4个选项 -->
<div class="one"> <span class="text"></span></div>
<div class="two"> <span class="text"></span></div>
<div class="three"> <span class="text"></span></div>
<div class="four"> <span class="text"></span></div>
</div>
<div class="right">
<div class="one"> <span class="text"></span></div>
<div class="two"> <span class="text"></span></div>
<div class="three"> <span class="text"></span></div>
<div class="four"> <span class="text"></span></div>
</div>
</div>
<!-- 图形中间的文字 -->
<div class="circle">
抽奖
</div>
</div>
<script src="style.js"></script>
</body>
</html>
*{
margin:0;
padding:0;
}
body{
/* 让div盒子放到屏幕中间 */
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.outher{
width:300px;
height: 300px;
position: relative;
border-radius: 50%;
}
.wapper{
width:300px;
height: 300px;
border-radius: 50%;
overflow: hidden;
background-color: black;
transform:rotate(22.5deg);
}
.left{
position: absolute;
width: 150px;
height: 300px;
left:0;
overflow: hidden;
}
.left .text{
position: absolute;
top:30px;
left:55%;
transform:rotate(-22.5deg);
text-align: center;
}
.right .text{
position: absolute;
top:25px;
left:11%;
transform:rotate(22.5deg);
text-align: center;
}
.right{
position: absolute;
width: 150px;
height: 300px;
right:0;
overflow: hidden;
text-align: center;
}
.left div{
position: absolute;
top:0;
left:0;
width: 100%;
height: 100%;
transform-origin: right center;
}
.left div.one{
background-color: #FC7C7B;
}
.left div.two{
background-color: #F59462;
transform:rotate(-45deg);
}
.left div.three{
background-color: #FC7C7B;
transform:rotate(-90deg);
}
.left div.four{
background-color: #F59462;
transform:rotate(-135deg);
}
.right div{
position: absolute;
top:0;
left:0;
width: 100%;
height: 100%;
transform-origin: left center;
}
.right div.one{
background-color: #FC7C7B;
}
.right div.two{
background-color: #F59462;;
transform:rotate(45deg);
}
.right div.three{
background-color: #FC7C7B;;
transform:rotate(90deg);
}
.right div.four{
background-color: #fff;
transform:rotate(135deg);
}
.circle{
width: 100px;
height: 100px;
background-color:#f2552e ;
position: absolute;
left:50%;
top:50%;
transform:translate(-50%,-50%);
border-radius: 50%;
text-align: center;
line-height: 100px;
font-size: 30px;
font-weight: bold;
cursor: pointer;
user-select: none;
}
.circle:after{
width: 0;
height: 0;
border:40px solid #f2552e ;;
border-left-width: 10px;
border-right-width: 10px;
position: absolute;
content:"";
border-left-color: transparent;
border-top-color: transparent;
border-right-color: transparent;
top:-70px;
left:calc(50% - 10px);
z-index: -1;
}
let wapper = document.querySelector(".wapper");
let textAll = document.querySelectorAll(".wapper .text");
// 这里是奖项的名字
let prize = ["1号大奖","2号大奖","3号大奖","4号大奖","5号大奖","6号大奖","7号大奖","未中奖"];
// 权重数组 不同奖项的权重值,权重越高越容易中这个区域
let prizeWeight = [1,3,5,7,10,15,20,30];
// 权重之和
let weightSum = prizeWeight.reduce(function(prevValue,curVal){
return prevValue + curVal;
});
for(let i = 0 ; i < textAll.length ; i++){
textAll[i].innerHTML = prize[i];
}
let isFlag = true;
document.querySelector(".circle").onclick=function(){
console.log(123);
if(isFlag){
// 生成权重随机数 生成数的范围是【1,30】
// 这里需要注意的是,这个30要和最上面的prizeWeight的最后一个值对应
let weightRandom = parseInt(Math.random()*30);
// 合并
let concatAfterArr = prizeWeight.concat(weightRandom);
// 排序
let sortedWeightArr = concatAfterArr.sort(function(a,b){ return a-b });
// randomIndex是奖项的索引 结果是【1,7】
var randomIndex = sortedWeightArr.indexOf(weightRandom);
randomIndex = Math.min(randomIndex, prize.length -1);
// 获奖的内容
let text = prize[randomIndex];
switch(randomIndex){
case 0:
run(22.5,text);
break;
case 1:
run(66.5,text);
break;
case 2:
run(112.5,text);
break;
case 3:
run(157.5,text);
break;
case 4:
run(338.5,text);
break;
case 5:
run(294.5,text);
break;
case 6:
run(247.5,text);
break;
case 7:
run(201.5,text);
break;
}
}
};
function run(angle,text){
isFlag = false;
let begin = 0;
let timer = null;
let basic = 1800;
timer = setInterval(function(){
if(begin > (basic+angle)){
isFlag = true;
clearInterval(timer);
}
wapper.style.transform="rotate("+(begin)+"deg)";
// 这是一个算法 可以出现转盘又很快到慢慢变慢的效果
begin+=Math.ceil(basic+angle-begin)*0.1;
},70);
}
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择