canvas转盘抽奖的实现(二)
本篇是《canvas转盘抽奖的实现(一)》的另一种实现方法,主要通过css3的transform以及transition过渡来实现。
// ' + r + '等奖';
}
draw();
var run = document.getElementById('run'),
result = document.getElementById('result'),
r,
flag = false;
var num = {
1:[1,2,3],
2:[4,5,6,7,8],
3:[9,10,11,12,13,14,15],
4:[16,17,18,19,20,21,22,23,24,25],
5:[26,27,28,29,30,31,32,33,34,35,36,37],
6:[38,39,40,41,42,43,44,45,46,47,48,49,50,51],
7:[52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],
8:[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
};
document.onselectstart = function() {
return false;
};
run.onclick = function() {
if(flag) return false;
flag = true;
r = (Math.random() * 100 + 1) >> 0;
for(var key in num) {
if(in_array(r,num[key])) {
r = key;
break;
}
}
c.style.transition = 'none';
c.style.transform = 'rotate(0)';
rotation();
};
function in_array(stringToSearch, arrayToSearch) {
for (s = 0; s
思路比较简单,事先规定好奖品待旋转的角度,然后通过rotate旋转。首先将奖品分为八组,每组记录待旋转的角度:
var data = {
1:{
prizeID:1,
rotate:2047.5
},
2:{
prizeID:2,
rotate:2002.5
},
3:{
prizeID:3,
rotate:1957.5
},
4:{
prizeID:4,
rotate:1912.5
},
5:{
prizeID:5,
rotate:1867.5
},
6:{
prizeID:6,
rotate:1822.5
},
7:{
prizeID:7,
rotate:1777.5
},
8:{
prizeID:8,
rotate:1732.5
}
};
点击抽奖按钮后执行旋转:
var r = Math.floor(Math.random() * 8 + 1);
function rotation() {
draw();
c.style.transition = 'all 3s ease-out';
c.style.transform = 'rotate('+ data[r].rotate +'deg)';
//监听transitionend,动画结束后触发事件
c.addEventListener('transitionend', stopRotation, false);
} function stopRotation() {
result.innerHTML ='<strong style="font-size:30px; color:red">' + r + '等奖</strong>';
}
css3还是很强大的,只需要几行代码就能把复杂的动画完成。但这里的中奖概率与上一篇的概率均等有所不同,加入了权重:
var num = {
1:[1,2,3],
2:[4,5,6,7,8],
3:[9,10,11,12,13,14,15],
4:[16,17,18,19,20,21,22,23,24,25],
5:[26,27,28,29,30,31,32,33,34,35,36,37],
6:[38,39,40,41,42,43,44,45,46,47,48,49,50,51],
7:[52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],
8:[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
};
选取100以内的随机数,观察它落在哪个区间,上述代码表示一等奖的概率只有3%,二等奖概率有5%。
r = (Math.random() * 100 + 1) >> 0;
for (var key in num) {
if (in_array(r, num[key])) {
r = key;
break;
}
}
canvas转盘抽奖的实现(二)的更多相关文章
- canvas转盘抽奖的实现(一)
网络上已经有了很多转盘抽奖的代码,但大多是用jQuery插件实现的,其中的原理比较难弄明白,于是自己摸索了一个.最终效果如下: // = totalTime) { stopRotation() ...
- canvas转盘抽奖
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" ...
- HTML5 Canvas绘制转盘抽奖
新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...
- 转盘抽奖 canvas & 抽奖 H5 源码
转盘抽奖 canvas https://github.com/givebest/wechat-turntalbe-canvas https://blog.givebest.cn/GB-canvas-t ...
- javascript 转盘抽奖代码和计数器代码
要介绍了javascript圆盘抽奖程序实现原理和完整代码例子,需要的朋友可以参考下 看到网页上有不少大转盘抽奖的应用,心血来潮也想弄个.于是找了点资料自己研究... 效果预览: 一.模拟抽奖的实 ...
- jquery——九宫格大转盘抽奖
一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Con ...
- 纯CSS3大转盘抽奖(响应式、可配置)
源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现.虽然比不上 Canvas 绘 ...
- jquery转盘抽奖的研究
先看效果: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- HTML5 Canvas圆盘抽奖应用(适用于Vue项目)
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
随机推荐
- [LOJ#114]k 大异或和
[LOJ#114]k 大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,每次给定一个数 k,求一个集合 T⊆S,使得集合 T 在 S 的所有非空子集的不同的异或和中,其异或和 ...
- python object与dict互相转换
代码如下 # 将class转dict,以_开头的属性不要 def props(obj): pr = {} for name in dir(obj): value = getattr(obj, name ...
- Redis Cluster 集群的实现和管理
系统环境 CentOS 7 集群规划 在一台物理机(实际部署应当分散到多个物理机上),创建6个Redis节点,其中3个主节点.3个从节点. 节点表: IP 端口 主从 路径 192.168.1.21 ...
- python print 在命令行打印带颜色
红色 :print "\033[1;31m%s\033[0m" %("ALY : %s" %(['a','b']))
- php--转码函数
最近在用dedecms二次开发会员功能:大家都知道dedecms编码是GBK格式的:所以在我们在项目中经常需要转码,在我了解中有两种转码方式:一是:iconv:二是mb_convert_encodin ...
- window10下用ZIP压缩包安装 mysql 8.0.11
1.下载地址 https://dev.mysql.com/downloads/mysql/ 2.解压后的文件目录如图,复制到指定的文件目录,如我的 E:\root\mysql-8.0.11-winx6 ...
- python笔记4:高级特性
4 高级特性 4.1 切片 [:] *注:-- list和tuple,字符串都支持切片 4.2 迭代 Iteration for ... in 及 for ... in if 两个变量迭代时, 例1 ...
- SourceTree免注册并连码云
1 在C:\Users\用户\AppData\Local\Atlassian\SourceTree目录下新建 accounts.json 其中AppData是隐藏文件夹 2 输入 [ { " ...
- Jackson对泛型的序列化和反序列化方法汇总
说明:Jackson对于简单泛型是可以正常操作的,但是如果对于太过于复杂的泛型类有时会不成功.目前还在找着更合适的Json库.不过这一点在dotnet原生方案JavaScriptSerializer可 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十三:IT人的成家之道-樸實
根據內政部一份2013年最新的調查報告指出台灣人的離婚率位居全球第三,想想看如果這是經濟成長率的排名表現那該有多好.然而究竟為何在台灣這塊小小的土地上,不僅離婚非常高而且晚婚的人也非常的多,其原因肯定 ...