美文网首页
canvas轮盘

canvas轮盘

作者: SherrinfordL | 来源:发表于2019-03-28 02:14 被阅读0次

以前研究canvas留下的东西,不过毕竟比较少做这方面,开始偏向后台,唯一记得就是不断的restore重绘......

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>抽奖</title>
    <style>
        .text-center {
            text-align: center;
        }

        .title {
            color: blue;
        }
        .div canvas{
            position: absolute;
            top:0;left:0;
        }
        button{
            width:200px;height:60px;
            color:red;
            font-weight: bold;
            font-size: 30px;
        }
    </style>
</head>
<body class="text-center">
<!--<h2 class="text-center title">抽奖</h2>-->
<div style="width:1200px;height:1200px;margin:50px auto;zoom: 0.5;position: relative;" class="text-center div">
    <!--转盘层的canvas-->
    <canvas id="canvas"></canvas>
    <!--指针所在的canvas-->
    <canvas id="canvas2"></canvas>
</div>
<button onclick="go()">开始抽奖</button>
</body>


<script>
    var colors = ['#33ACB5', '#DF5C5D', '#B4D966', '#5450B3', '#FFD457', '#3A97EA', '#FAA167', '#63CA97', '#9A50B3'];
    //定义人名和对应的颜色
    var data = [
        {name: '胡胡', color: colors[0]},
        {name: 'LUKE', color: colors[1]},
        {name: '雕兄', color: colors[2]},
        {name: '他妹', color: colors[3]},
        {name: '他弟', color: colors[4]},
        {name: 'VUE总', color: colors[5]},
        {name: '二代目工头', color: colors[6]},
        {name: '初代目工头', color: colors[7]},
        {name: '三代目工头', color: colors[8]},
        {name: '痴汉', color: colors[6]},
        {name: '猪头', color: colors[5]}
    ];

    var canvas = document.getElementById('canvas');//转盘所在画布
    var canvas2 = document.getElementById('canvas2'); //指针所在画布
    canvas.width = canvas2.width = 1200;
    canvas.height = canvas2.height = 1200;

    var sector = canvas.getContext("2d"); //每一个区域块
    var hand = canvas2.getContext("2d");  //指针

    var w = canvas.width;
    var h = canvas.height;

    paintName(data);

    //画指针
    hand.fillStyle = "black";
    hand.fillRect(595, 50, 10, 600);
    hand.arc(w/2,h/2,30,0,Math.PI*2);
    hand.fill();

    //绘制转盘
    function paintName(data) {
        var len = data.length;
        var angle = Math.PI * 2 / len;//为每一块分配角度

        for (var i = 0; i < data.length; i++) {
            var item = data[i];

            sector.beginPath();
            sector.moveTo(w / 2, h / 2);
            sector.lineTo(w - 3, h / 2);
            sector.arc(w / 2, h / 2, h / 2 - 3, 0, angle);
            // sector.lineTo(w / 2, h / 2);
            sector.fillStyle = item.color;
            sector.fill();
            // sector.stroke();

            //旋转所渲染的块
            sector.translate(600, 600); // 设置原点为画布中心
            sector.rotate(angle);
            sector.translate(-600, -600); // 恢复画布中心到(0,0)

            sector.save();

            //绘制文字
            sector.translate(900, 600);
            sector.font = "50px Georgia";
            sector.fillStyle = "#fff";
            sector.fillText(item.name, -80, -60);
            sector.translate(-1000, -600);//如果不用save和restore把translate里的1000改为900就好
            sector.restore();
        }
    }

    //点击click的时候调用这个方法
    //我这里有定义了加速度a0,他是随机生成的,所以每次点击开始抽奖的时候,转动的加速度是随机的,这保证了抽奖的随机性
    function go() {
        var time = 3000;
        var a0 = (Math.random()+5) / 100;//保证最小固定加速度为0.05
        var clock = 20;
        var normal = 20;
        var interval = setInterval(function () {
            // var a = time >= 1500 ? a0:-a0;            
            var v = time >= 1500 ? a0 * (3000-time) : a0*1500 + -a0 * (1500-time);//旋转角度
            // clock = v >= 1500 ? clock : clock+60;
            sector.translate(600,600);
            sector.rotate(Math.PI/180 * v);
            sector.translate(-600,-600);
            sector.clearRect(0,0,1200,1200);
            paintName(data);
            time -= normal;

            if(time == 0){
                window.clearInterval(interval);
            }
        },clock)
    }
</script>
</html>
image.png

相关文章

  • canvas轮盘

    以前研究canvas留下的东西,不过毕竟比较少做这方面,开始偏向后台,唯一记得就是不断的restore重绘......

  • Canvas动画案例-椭圆轮盘转动

    做大屏开发突然想到的一个轮盘转动实现,用的canvas-2d, 当然,这类效果使用webgl实现因该会更好,不过笔...

  • 轮盘

    每次与朋友说起复杂的人际关系时,我会说到自己曾经写下的,情绪轮盘的概念 将人的情绪,看成是一个个轮盘 里面装着大大...

  • 轮盘

    轮盘上的刻度,忽大忽小,忽明忽暗 变化莫测高深的世态啊 捉摸不定,你我之间的距离 昨天的笑,今天的哭 一场心事雨水...

  • 轮盘

    轮盘翻转万钻袭 它能把生活充盈 多读多写益身心 不时还有小奖励

  • 轮盘

    成群结队的黑虫一一 扑打翅膀 撞鼓玻璃 桌面震颤 酒杯晃荡,碎镜 千张面孔,商鞅、王安石丶李斯…… 扭曲变型 轮盘...

  • iOS 抽奖轮盘效果实现思路

    iOS 抽奖轮盘效果实现思路 iOS 抽奖轮盘效果实现思路

  • GoDapp带你玩转Roulette游戏

    轮盘游戏中包含一个轮盘和一张桌子。 轮盘上标有1-36的红黑两色数字和一个绿色的0。 桌子上则显示了与轮盘相对应的...

  • 抽奖轮盘

  • 命运轮盘

    终古的苍山燃起烈火, 北疆的野鹿满面苍茫, 时历的旧一面燃烧残余, 新的时代又冉冉升起。 荷塘月影,日与繁星, 纵...

网友评论

      本文标题:canvas轮盘

      本文链接:https://www.haomeiwen.com/subject/jexfbqtx.html