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& ...
随机推荐
- mac/linux自带定时任务执行crontab的使用
1.编辑定时任务信息 sudo crontab -e #以root用户创建,也可以 -u 参数 编辑内容如下: 频率表达式分别对应为 分.时.日.周.月 LANG=zh_CN.UTF-8 */30 * ...
- poj 4001 To Miss Our Children Time
To Miss Our Children Time Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Jav ...
- 【BZOJ2693】jzptab (莫比乌斯反演)
Description 给你$n$,$m$,求 $\sum^n_{i=1} \sum^m_{j=1} \ lcm(x,y)$ 答案对$100000009$取模. 多组数据. Input 第一行有一个正 ...
- POJ 2411Mondriaan's Dream
题目: Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after prod ...
- mongodb window安装学习
https://blog.csdn.net/u011692780/article/details/81223525 教程:http://www.runoob.com/mongodb/mongodb-t ...
- XSD(XML Schema Definition)学习笔记
今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...
- Laravel 基础知识
使用版本Laravel5.1.======================================================目录简单介绍:app目录,核心目录,应用目录.bootstra ...
- .net压缩图片质量(附demo)
private void CompressedImage(string fileName, long quality) { FileStream fs = new FileStream(fileNam ...
- Reveal.js演讲幻灯片框架
摘要 还需学习参考的链接 https://www.tuicool.com/articles/2AFFj2j 无意中看到这个插件,很喜欢,可以作用在演讲ppt,幻灯片,用户指引上等.代码简单,易维护 ...
- 域名缓存侦测(DNS Cache Snooping)技术
域名缓存侦测(DNS Cache Snooping)技术 在企业网络中,通常都会配置DNS服务器,为网络内的主机提供域名解析服务.这些DNS不仅解析自己的私有域名,还会用递归方式,请求公网的DNS解析 ...