canvas写抽奖大转盘图片和文字

编程入门 行业动态 更新时间:2024-10-23 09:34:44

canvas写抽奖大<a href=https://www.elefans.com/category/jswz/34/1740101.html style=转盘图片和文字"/>

canvas写抽奖大转盘图片和文字

一.用canvas创建一个抽奖大转盘

html

   <canvas class="canvas_wheel" id="wheelcanvas" width="422px" height="422px"></canvas>

js

  	//页面加载时画圆盘
$(document).ready(function(){var comiddity = getComiddity()//动态添加大转盘的奖品与奖品区域背景颜色turnplate.restaraunts= comiddity.info;turnplate.colors= comiddity.colors;var rotateTimeOut = function (){$('#wheelcanvas').rotate({angle:0,animateTo:2160,duration:8000,callback:function (){alert('网络超时,请检查您的网络设置!');}});};//页面所有元素加载完毕后执行drawRouletteWheel()方法对转盘进行渲染window.onload=function(){drawRouletteWheel();};})

大转盘js代码

* * 用canvas画大转盘*/var turnplate={restaraunts:[],				//大转盘奖品名称colors:[],					//大转盘奖品区块对应背景颜色outsideRadius:192,			//大转盘外圆的半径textRadius:155,				//大转盘奖品位置距离圆心的距离insideRadius:56,			//大转盘内圆的半径startAngle:0,				//开始角度bRotate:false				//false:停止;ture:旋转
};function drawRouletteWheel(){var canvas = document.getElementById("wheelcanvas");if(canvas.getContext){//根据奖品个数计算圆周角度var arc = Math.PI / (turnplate.restaraunts.length/2);var ctx = canvas.getContext("2d");//在给定矩形内清空一个矩形ctx.clearRect(0,0,422,422);//strokeStyle 属性设置或返回用于笔触的颜色、渐变或模式ctx.strokeStyle = "#FFBE04";//font 属性设置或返回画布上文本内容的当前字体属性ctx.font = '14px Microsoft YaHei';for(var i = 0; i< turnplate.restaraunts.length; i++){var angle = turnplate.startAngle + i * arc;var startAngle = 211;var text = turnplate.restaraunts[i];ctx.fillStyle = turnplate.colors[i];ctx.beginPath();//arc(x,y,r,起始角,结束角,绘制方向) 方法创建弧/曲线(用于创建圆或部分圆)ctx.arc(startAngle, startAngle, turnplate.outsideRadius, angle, angle + arc, false);ctx.arc(startAngle, startAngle, turnplate.insideRadius, angle + arc, angle, true);ctx.stroke();ctx.fill();//锁画布(为了保存之前的画布状态)ctx.save();//----绘制奖品开始----//translate方法重新映射画布上的 (0,0) 位置ctx.translate(startAngle + Math.cos(angle + arc / 2) * turnplate.textRadius, startAngle + Math.sin(angle + arc / 2) * turnplate.textRadius);//rotate方法旋转当前的绘图ctx.rotate(angle + arc / 2 + Math.PI / 2);//添加文字addText(text,ctx)//添加对应图标addImg(text,ctx)}}}//旋转转盘 item:奖品位置; txt:提示语;var rotateFn = function(item,txt,obj,that){var angles = item * (360 / turnplate.restaraunts.length)-(360 / (turnplate.restaraunts.length*2))if(angles<270){angles = 270 - angles;}else{angles = 360 - angles + 270;}$('#wheelcanvas').stopRotate();$('#wheelcanvas').rotate({angle:0,animateTo:angles+1800,duration:8000,callback:function (){//中奖提示窗if(objmodityId==-1){$(".popup_box").show();that.popupMsg = "losingLottery";}else{$(".popup_box").show();that.winingType= obj.type;that.popupMsg = "windPrize";that.winVal = obj.faceValue;that.winName = obj.prizeName;}turnplate.bRotate = !turnplate.bRotate;}});}function addText(text,ctx){//----绘制奖品开始----var line_height = 17;ctx.fillStyle = "#E5302F";/** 下面代码根据奖品类型、奖品名称长度渲染不同效果,如字体、颜色、图片效果。(具体根据实际情况改变) **/if(text.title.length>6){//奖品名称长度超过一定范围text = text.title.substring(0,6)+"||";var texts = text.split("||");for(var j = 0; j<texts.length; j++){ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);}}else{//在画布上绘制填色的文本。文本的默认颜色是黑色//measureText()方法返回包含一个对象,该对象包含以像素计的指定字体宽度//添加标题文字ctx.fillStyle="#FF3C3C";ctx.textBaseline = 'alphabetic';ctx.fillText(text.title, -ctx.measureText(text.title).width / 2, 0);}
}function addImgText(text,ctx){ctx.font = '16px LingYue';ctx.rotate(Math.PI/180*90); //旋转90度,变成竖排ctx.fillStyle="#ffffff";ctx.globalAlpha = -0.26;ctx.fillText( text.faceVal,-ctx.measureText(text.faceVal).width / 2+30,5,80);ctx.font = '10px LingYue';ctx.fillStyle="#ffffff";ctx.fillText( "元",ctx.measureText(text.faceVal).width / 2+35,5);ctx.rotate(Math.PI/180*270);  //回到原来
}
function addImg(text,ctx){//添加对应图标if(textmodityId==0){var img= document.getElementById("red-packet");img.onload=function(){ctx.drawImage(img,-16,20,32,40);};ctx.drawImage(img,-16,20,32,40);}else if(textmodityId==-1){var img= document.getElementById("smiling");img.onload=function(){ctx.drawImage(img,-16,20,32,32);};ctx.drawImage(img,-16,20,32,32);}else{var img= document.getElementById("ticket");img.onload=function(){ctx.drawImage(img,-15,10,30,60);};ctx.drawImage(img,-15,10,30,60);addImgText(text,ctx)}//把当前画布返回(调整)到上一个save()状态之前ctx.restore();//----绘制奖品结束----}

期间由于此大转盘需要文字在背景图上,解决的办法是将图片引入然后再添加文字,这样就可以解决

更多推荐

canvas写抽奖大转盘图片和文字

本文发布于:2024-02-12 19:52:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1689192.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:转盘   文字   图片   canvas

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!