转盘抽奖小程序java_大转盘抽奖小程序版 转盘抽奖网页版
今天整理了下以前写的小demo,把大转盘抽奖的代码,整合下,列了网页版和小程序两个版本,这个转盘抽奖的核心是H5的canvas和Css3的translate属性,非常简单,写了网页版和小程序版供大家参考,主要核心代码就是利用canvas画图,完整代码见大转盘抽奖,下载可用
希望给大家带来帮助
//转盘内部绘制
lottery.prototype.getCanvasI=function(){
let itemsArc=360/this.itemsNum //获取大转盘每等分的角度
this.itemsArc=itemsArc
let widthI=canvasI.width
let heightI=canvasI.height
this.w1=parseInt(widthI/2)
this.h1=parseInt(heightI/2)
this.Items(itemsArc)//每一份扇形的内部绘制
this.mytime=setInterval(this.light.bind(this),1000)
}
//绘制奖品名称
lottery.prototype.Items=function(e){
let that=this
let itemsArc=e//每一分扇形的角度
let Num=that.itemsNum// 等分数量
let text=that.text// 放文字的数组
for(let i=0;i
ctx.beginPath()
ctx.moveTo(that.w1,that.h1)
ctx.arc(that.w1,that.h1,that.w1-5,itemsArc * i * Math.PI / 180, (itemsArc + itemsArc * i) * Math.PI / 180)//绘制扇形,注意下一个扇形比上一个扇形多一个itemsArc的角度
ctx.closePath()
if (i % 2 == 0) {//绘制偶数扇形和奇数扇形的颜色不同
ctx.fillStyle=that.color[0]
} else {
ctx.fillStyle=that.color[1]
}
ctx.fill()
ctx.save()
ctx.beginPath()
ctx.fontSize=12
ctx.fillStyle='#000'
ctx.textAlign='center'
ctx.textBaseline='middle'
ctx.translate(that.w1, that.h1);//将原点移至圆形圆心位置
ctx.rotate((itemsArc * (i + 2)) * Math.PI / 180);//旋转文字,从 i+2 开始,因为扇形是从数学意义上的第四象限第一个开始的,文字目前的位置是在圆心正上方,所以起始位置要将其旋转2个扇形的角度让其与第一个扇形的位置一致。
ctx.fillText(that.text[i], 0, -(that.h1 * 0.8));
ctx.restore();//保存绘图上下文,使上一个绘制的扇形保存住。
}
}
//跑马灯绘制
lottery.prototype.light=function(){
var that=this
var itemsNum=that.itemsNum
that.lamp++
if(that.lamp>=2){
that.lamp=0
}
ctx2.beginPath()
ctx2.arc(that.w2,that.h2,that.w2,0,2*Math.PI)//绘制底色为红色的圆形
ctx2.fillStyle="#FA7471";
ctx2.fill()
for(let i=0;i
ctx2.save()
ctx2.beginPath()
ctx2.translate(that.w2,that.h2)
ctx2.rotate(30*i*Math.PI/180)
ctx2.arc(0,that.h2-10,5,0,2*Math.PI)//圆形跑马灯小圆圈
//跑马灯第一次闪烁时与第二次闪烁时绘制相反的颜色,再配上定时器循环闪烁就可以达到跑马灯一闪一闪的效果了
if(that.lamp==0){//第一次闪烁时偶数奇数的跑马灯各绘制一种颜色
if(i%2==0){
ctx2.fillStyle="#FBF1A9";
} else {
ctx2.fillStyle="#fbb936";
}
}else {//第二次闪烁时偶数奇数的跑马灯颜色对调
if (i % 2 == 0) {
ctx2.fillStyle="#fbb936";
} else {
ctx2.fillStyle="#FBF1A9";
}
}
ctx2.fill()
ctx2.restore()//恢复之前保存的上下文,可以将循环出来的跑马灯都保存下来。没有这一句那么每循环出一个跑马灯则上一个跑马灯绘图将被覆盖,
}
}
小程序的代码示例
//事件处理函数
onLoad: function (e) {
let that=this
let itemsArc=360/that.data.itemsNum //获取大转盘每等分的角度
that.setData({
itemsArc
},function () {
wx.createSelectorQuery().select('#canvas-one').boundingClientRect(function (rect) {
w1=parseInt(rect.width/2)
h1=parseInt(rect.height/2)
that.Items(itemsArc)//每一份扇形的内部绘制
}).exec()
mytime=setInterval(that.light,1000)//启动跑马灯定时器
})
},
onReady:function () {
var that=this
wx.createSelectorQuery().select('#canvas-bg').boundingClientRect(function (rect) {//监听canvas的宽高
w2=parseInt(rect.width/2)
h2=parseInt(rect.height/2)
that.light()
}).exec()
},
light(){//跑马灯绘制
let that=this
let itemsNum=that.data.itemsNum
lamp++
if(lamp>=2){
lamp=0
}
ctx2.beginPath()
ctx2.arc(w2,h2,w2,0,2*Math.PI)//绘制底色为红色的圆形
ctx2.setFillStyle("#FA7471")
ctx2.fill()
for(let i=0;i
ctx2.save()
ctx2.beginPath()
ctx2.translate(w2,h2)
ctx2.rotate(30*i*Math.PI/180)
ctx2.arc(0,w2-10,5,0,2*Math.PI)//绘制圆形跑马灯小圆圈
//跑马灯第一次闪烁时与第二次闪烁时绘制相反的颜色,再配上定时器循环闪烁就可以达到跑马灯一闪一闪的效果了
if(lamp==0){//第一次闪烁时偶数奇数的跑马灯各绘制一种颜色
if(i%2==0){
ctx2.setFillStyle("#FBF1A9");
} else {
ctx2.setFillStyle("#fbb936");
}
}else {//第二次闪烁时偶数奇数的跑马灯颜色对调
if (i % 2 == 0) {
ctx2.setFillStyle("#fbb936");
} else {
ctx2.setFillStyle("#FBF1A9");
}
}
ctx2.fill()
ctx2.restore()//恢复之前保存的上下文,可以将循环出来的跑马灯都保存下来。没有这一句那么每循环出一个跑马灯则上一个跑马灯绘图将被覆盖,
}
ctx2.draw()
},
Items(e){
let that=this
let itemsArc=e//每一分扇形的角度
let Num=that.data.itemsNum// 等分数量
let text=that.data.text// 放文字的数组
for(let i=0;i
ctx.beginPath()
ctx.moveTo(w1,h1)
ctx.arc(w1,h1,w1-5,itemsArc * i * Math.PI / 180, (itemsArc + itemsArc * i) * Math.PI / 180)//绘制扇形,注意下一个扇形比上一个扇形多一个itemsArc的角度
ctx.closePath()
if (i % 2 == 0) {//绘制偶数扇形和奇数扇形的颜色不同
ctx.setFillStyle(that.data.color[0])
} else {
ctx.setFillStyle(that.data.color[1])
}
ctx.fill()
ctx.save()
ctx.beginPath()
ctx.setFontSize(12)
ctx.setFillStyle('#000')
ctx.setTextAlign('center')
ctx.setTextBaseline('middle')
ctx.translate(w1, h1);//将原点移至圆形圆心位置
ctx.rotate((itemsArc * (i + 2)) * Math.PI / 180);//旋转文字,从 i+2 开始,因为扇形是从数学意义上的第四象限第一个开始的,文字目前的位置是在圆心正上方,所以起始位置要将其旋转2个扇形的角度让其与第一个扇形的位置一致。
ctx.fillText(text[i], 0, -(h1 * 0.8));
ctx.restore();//保存绘图上下文,使上一个绘制的扇形保存住。
}
// that.Images();
ctx.draw(true);//参数为true的时候,保存当前画布的内容,继续绘制
},
效果图如下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
转盘抽奖小程序java_大转盘抽奖小程序版 转盘抽奖网页版相关推荐
- 微信小程序期末大作业 中草药小程序 药海拾遗
微信小程序期末大作业 中草药小程序 药海拾遗 小程序详情如下:(下载链接在文末) 学习社区可以自己添加内容 点我下载资源 https://download.csdn.net/download/weix ...
- 小眼睛适合大框还是小框眼镜_大镜框还是小镜框?切记适合的才是最好的!
如果要问一个人的眼睛大一些好?还是小一些好?相信大家都会异口同声的回答大眼睛!可是如果将这个问题中的一个字做改动,变为"大眼镜.小眼镜哪个更好",您还会不假思索理所当然的回答&qu ...
- 小眼睛适合大框还是小框眼镜_北京潘家园眼镜城良心商家推荐
去潘家园配眼镜,水深,但是性价比真的高.仔细鉴别还是很划算的,我在潘家园眼镜城转了1天,综合对比,选择了很有名的润智配镜. 以下配镜经验: 第一,验光:一定找个有自己验光师的眼镜店!集中验光,仓促验不 ...
- 小眼睛适合大框还是小框眼镜_小眼睛合适什么眼镜框 这个禁忌千万不要犯
小眼睛适合什么眼镜框 许多天生眼睛偏小的人,都会想尽方法来让自己的眼睛看起来更大,而佩戴眼镜就是其中对比多见的方式.但佩戴眼镜也是需要讲究诀窍的,那么,小眼睛的人应该如何挑选眼镜呢? 对于现代的年轻男 ...
- 小眼睛适合大框还是小框眼镜_【图】小眼睛适合什么眼镜框 这个禁忌千万不要犯_小眼睛_伊秀服饰网|yxlady.com...
很多天生眼睛偏小的人,都会想尽办法来让自己的眼睛看起来更大,而佩戴眼镜就是其中比较常见的方式.但佩戴眼镜也是需要讲究诀窍的,那么,小眼睛的人应该如何挑选眼镜呢? 对于现代的年轻男女来说,很多时候佩戴眼 ...
- 计算机主板 大 小,电脑主板选大的还是小的比较好?
电脑主板的规格主要分为E-ATX.ATX.Micro-ATX和Mini-ITX等,最常见的就是ATX和Micro-ATX主板,也就是通常所说的大板和小板.其实从性能来讲,大板和小板并没有太大差别,但大 ...
- 小眼睛适合大框还是小框眼镜_近视眼镜大框好还是小框好?
大框眼镜一直备受明星的青睐,稍微关注时尚的都知道,时尚女王范冰冰常常用黑色大框眼镜为自己的装扮"润色",不仅是明星,大框眼镜已成为潮人必备,不仅时尚,它还实用,某些女孩子选择大框眼 ...
- 小眼睛适合大框还是小框眼镜_【图】小眼睛适合什么眼镜框呢 你选对了吗_小眼睛_伊秀美容网|yxlady.com...
如今,科技也发展的越来越快了,虽然带给了人们很多的好处,但也给人们带来不小的压力,人们的生活节奏变得很快,每一天还有长时间的面对着电脑,对眼睛造成了不好的影响. 现如今社会上的竞争越来越激烈,人们的生 ...
- 小程序统一服务消息_小程序客服消息接入微信教程
很多商家在咨询小程序,都会咨询手机上能不能接待客户,当然可以,但需要开通客服助手小程序,下面就和大家分享一下小程序客服消息接入微信教程? 基本流程:客服入口-添加绑定客服微信号-用绑定客服微信号扫码- ...
- 大趋势和小趋势的辩证关系(一)
在论述这个命题前,定义本博认可的有关趋势的指标. 60.120和250日线代表大趋势的K线: 30日线作为大趋势和小趋势的分界: 20.10.5日线及60分钟.30分钟.15分钟和5分钟K线的各单位组 ...
最新文章
- 2018年4月26日笔记
- 【计算理论】计算复杂性 ( coNP 问题 | coNP 完全 | P、NP、coNP 相互关系 )
- java 清空jframe_java – 在新游戏中清除我的JFrame和JPanel
- 根据redis自增生成全局唯一订单id
- NHibernate 3.0在PetShop 3层架构中的应用 系列
- Codeforces940(A-F)
- [tp3.2.1]数据模型 - 简单的模型连接
- [react] react父子组件如何通信?
- VIM使用系列之一——配置VIM下编程和代码阅读环境
- Activiti工作流引擎的使用
- java通过POI技术将html转成word
- 剑指Offer-- 二维数组中的查找
- 时隔两年,盘点ECCV 2018影响力最大的20篇论文
- 某东商城获取eid和fp参数方法
- SSH 无法启动的原因分析及解决方法
- 《代码大全》学习摘要(五)软件构建中的设计(下)
- glut相关函数说明
- 【软件工程】-项目开发计划
- 浏览器保存图片时,将jfif改为jpg格式
- 基于myscript.js的web手写板(支持中文识别)