• 转盘代码,自己搞了一个


    <html lang="zh-CN">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <style>
    
        </style>
        <script>
            var zhuanpanR = 200;//转盘半径
            var info = [11,22,33,44,55,66,77,88]
            var color = ['#78a355','#FF9966','#66CCCC','#99CCFF','#009999','#99CCFF','#99CCCC','#FFCCCC']
            var radio = 0.95;//旋转速度衰减系数,影响旋转时间
            var splitNum = info.length;
    
            var t = null;
            var ms = 30;//每次定时转动的角度,如30度
            var fixed_ms = 30;//每次定时转动的角度,如30度
            var total = 720;//总转度数
            window.onload = function(){
                var canvas = document.getElementById("myCanvas");
                var ctx = canvas.getContext("2d");
                ctx.translate(zhuanpanR, zhuanpanR);//设置画布中心,旋转时是按中心点为基础来旋转的,默认(0,0)
                var initDu = 360/splitNum/2;
                ctx.rotate(initDu*Math.PI/180);//旋转角度,先转半个分割扇形,让竖向中心分割线能平分小扇形
                initZhuanpan(8,0);
            }
    
            /**
             * @param splitNum 拆分扇形份数
             * */
            function initZhuanpan(splitNum, du){
                var canvas = document.getElementById("myCanvas");
                var ctx = canvas.getContext("2d");
                ctx.rotate(du*Math.PI/180);//旋转角度
                ctx.fillStyle="#FF0000";
    
                //画圆和分割线
                var step = Math.PI * 2 / splitNum;//一个圆弧对应的弧度
                for (var i = 0; i < splitNum; i++) {
                    ctx.save();
                    ctx.beginPath();
                    ctx.moveTo(0, 0);
                    ctx.arc(0, 0, 200, i*step,(i+1)*step);
                    ctx.closePath();
                    ctx.fillStyle = color[i];//getRandomColor();
                    ctx.fill();
                    ctx.restore();
                }
    
                //画文字
                for ( var i = 0; i < splitNum; i++) {
                    ctx.save();//调用save()时,将记录当前的绘图状态,并压入一个堆栈中
                    ctx.beginPath();
                    ctx.fillStyle="#000";
                    ctx.font="15px 微软雅黑";
                    ctx.textAlign="center";
                    ctx.textBaseline="middle";
                    ctx.rotate(i*step+step/2);
                    ctx.fillText(info[i],100,0)
                    ctx.restore(); //调用restore()方法时,就会把上一次记录的绘图状态从堆栈中弹出。(出栈的次数不能多于入栈的次数,故程序中restore()调用次数不应多余save())
                }
    
            }
            //随机颜色,暂不用
            function getRandomColor() {
                var r = parseInt(Math.random() * 256);
                var g = parseInt(Math.random() * 256);
                var b = parseInt(Math.random() * 256);
                return 'rgb(' + r + ',' + g + ',' + b + ')';
            }
    
            function start() {
                //避免快速重复点击
                if(t){
                    return false;
                }
                var canvas = document.getElementById("myCanvas");
                var ctx = canvas.getContext("2d");
    
                //已转动的角度
                var angle = 0;
                t = setInterval(function(){
                    angle +=ms;
    //                console.log("angle="+angle);
                    //还有600度的时候开始按0.95衰减,转动角度最低按每30ms转2度
                    if(total-angle <=600){
                        ms *= radio;
                        if(ms<=2){
                            ms = 2;
                        }
                        if(total-angle <=1){
                            clearInterval(t);
                            var departDu = 360/splitNum;
                            var pos = Math.ceil((total) / departDu);
                            var a = Math.ceil(pos % splitNum);
                            var newA = a + 5;//计算12点方向所属区域文本扇形序号
    
                            var res = info[newA];
                            document.getElementById("result").innerHTML = res;
                            ms=30;//恢复初始值值
                            t = null;
                        }
                    }
                    ctx.save();
                    initZhuanpan(splitNum,angle);
                    ctx.restore();
                },30);
            }
    
    
        </script>
    </head>
    
    <body style="">
    <div style="margin:100px auto;400px;">
        结果:<div id="result">22222</div>
        <canvas id="myCanvas" width="400" height="400" style="border:1px solid #999999;align:center"></canvas>
        <button id="btn" style="margin-top:20px;" onclick="start()">抽奖</button>
    </div>
    </body>
    </html>

  • 相关阅读:
    如何开始DDD(续)
    如何开始DDD
    ThinkNet终于见面了
    [Umbraco] umbraco中如何分页
    ETL 工具下载全集 包括 Informatica Datastage Cognos( 持续更新)
    js时间对比-转化为几天前,几小时前,几分钟前
    原生JS实现返回顶部和滚动锚点
    JSONP原理及简单实现 可做简单插件使用
    CSS3 transition效果 360度旋转 旋转放大 放大 移动
    js获取url的常用方法
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/14496728.html
Copyright © 2020-2023  润新知