HTML5之CANVAS学习,实现抽奖转盘

                     实现个小例子来达到学习的目的,无疑是最好的。很看到网上有很多已经实现的转盘游戏,自己也试着写了一个,思路是:画一个圆盘,分成10份,设立10个奖项,中间有个指针,点抽奖后旋转指针。

代码如下:

             1.画圆盘

        //绘制转盘圆环
        function createCircle(){
            //圆环上的颜色
            var color = ["#D14278","#953FAE","#586837","#C7C76F","#AF2729","#3A9C76","#CCA540","#5998FE","#52DB53","#FEB834"];
            var startAngle = 0;//扇形的开始弧度
            var endAngle = 0;//扇形的终止弧度
            //画一个10等份扇形组成的圆形
            for (var i = 0; i< 10; i++){

                startAngle = Math.PI*(2/10)*i;//0到2PI是一个整圆
                endAngle = Math.PI*(2/10)*(i+1);
                //保存当前绘画状态,以便我们画完这副画以后restore()再恢复到这个状态,画另一副画。
                ctx.save();
                ctx.beginPath();
                /*ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
                x和y参数是圆心坐标,radius是半径,
                startAngle和endAngle则是扇形的起始角度和终止角度(以弧度表示),
                anticlockwise表示做图时应该逆时针画(true)还是顺时针画(false)
                */
                ctx.arc(centerX, centerY, 150, startAngle, endAngle, false);
                ctx.lineWidth = 160.0;
                ctx.strokeStyle =  color[i];
                ctx.stroke();//空心圆
                ctx.restore();
            }
            
        }

      2.绘制扇形上的字,即奖项

       var info=["一等奖","特等奖","三等奖","四等奖","五等奖","安慰奖","谢谢参与","八等奖","九等奖","十等奖"];
        function createCirText(){
            
            ctx.font = "Bold 20px Arial"; // 设置字体
            ctx.textAlign='start';//文本水平对齐方式
            ctx.textBaseline='middle';//文本垂直方向,基线位置
            ctx.fillStyle = "#000";// 设置填充颜色
            var step = 2*Math.PI/10;//10分之1圆的弧度
            for ( var i = 0; i < 10; i++) {
                 ctx.save();
                 ctx.beginPath();
                 ctx.translate(centerX,centerY);//平移到圆心
                 ctx.rotate(i*step+step/2);//从时钟15点处开始旋转弧度i*step+step/2
                 ctx.fillText(info[i],125,0);
                 ctx.restore();
            }
        }

  3.绘制转盘指针
        function initPoint(){
            //直线加箭头
            ctx2.beginPath();//开始绘制
            ctx2.moveTo(0,2);//起始位置
            ctx2.lineTo(lineLen,2);//终点位置
            ctx2.lineTo(lineLen,4);
            ctx2.lineTo(lineLen+10,0);//箭头的长度
            ctx2.lineTo(lineLen,-4);
            ctx2.lineTo(lineLen,-2);
            ctx2.lineTo(0,-2);            
            ctx2.fillStyle = "#C01020";
            ctx2.fill();
            ctx2.closePath();
        }

4.旋转操作

//点击按钮开始旋转
        function doFly(){
            myCanvas2.width = 800;
            ctx2.translate(centerX,centerY);//平移到圆心
            if(t){
                return;
            }
             var step = 50 +Math.random()*10;
             var angle = 0;//旋转的角度
             t = setInterval(function(){
                step *= 0.95;
                if(step <= 0.1){
                    clearInterval(t);
                    t = null;
                    var pos = Math.floor(angle/36);//因为分成了10等分,旋转的角度除以36,可得到当前旋转的度数
                    alert(info[pos]);
                }else{
                    ctx2.restore();
                    ctx2.save();
                    ctx2.rotate(angle * Math.PI/180);//很关键,要旋转到上一次的角度,才能清掉上一次的指针
                    ctx2.clearRect(-5,-5, 170, 18);//先清,起始点已经平移到圆心,即圆心坐标为(0,0)
                    
                    angle+=step;
                       if(angle > 360){//如果旋转角度大于360度后,减去360
                          angle -=360;
                       }
                    ctx2.restore();
                    ctx2.save();
                    ctx2.rotate(angle * Math.PI/180);
                    initPoint();
                }
            },60);
        }

效果图:


源码下载:http://download.csdn.net/download/bewhatyouare/8435871

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值