zoukankan      html  css  js  c++  java
  • canvas绘制柱状图和、绘制形状中心旋转

    <!DOCTYPE html>
    <html ng-app="">
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <canvas id="cvs" width="400" height="300">不支持</canvas>
        <script>
            var cvs = document.getElementById('cvs');
            var ctx = cvs.getContext('2d');
            ctx.strokeStyle = 'blue';
            ctx.lineWidth = '2';
            //设置原点
            var original = {x:40,y:260};
            //设置坐标
            var bottomRight = {x:360,y:260};
            var bottomTop = {x:40,y:40};
            ctx.beginPath();
            //X轴
            ctx.moveTo(original.x,original.y);
            ctx.lineTo(bottomRight.x,bottomRight.y);
            ctx.lineTo(bottomRight.x-15,bottomRight.y-10);
            ctx.moveTo(bottomRight.x-15,bottomRight.y+10);
            ctx.lineTo(bottomRight.x,bottomRight.y);
            //Y轴
            ctx.moveTo(original.x,original.y);
            ctx.lineTo(bottomTop.x,bottomTop.y);
            ctx.lineTo(bottomTop.x+10,bottomTop.y+15);
            ctx.moveTo(bottomTop.x-10,bottomTop.y+15);
            ctx.lineTo(bottomTop.x,bottomTop.y);
            var avgWidth = 58;
            var rectWidth = 36;
            for(var i=0;i<5;i++){
          //如果i==0,不绘制刻度
    if(i>0){ ctx.moveTo(original.x+avgWidth*i,original.y); ctx.lineTo(original.x+avgWidth*i,original.y-10); } //柱状的X坐标 var rectX = avgWidth*i+(avgWidth-rectWidth)/2; //柱状的高度 var rectH = Math.floor(Math.random()*260); //绘制柱状图(X坐标,Y坐标,宽度,高度) ctx.fillRect(original.x+rectX,original.y-rectH,rectWidth,rectH); } ctx.stroke(); </script> </body> </html>
    如何是形状中心旋转
    <!DOCTYPE html>
    <html>
    <head lang="en">
      <meta charset="UTF-8">
      <title></title>
    </head>
    <body>
    <h2>如何是形状中心旋转</h2>
    <canvas id="cvs"></canvas>
    <script>
      //1.获取画布
      var cvs = document.getElementById('cvs');
      //2.获取上下文
      var ctx = cvs.getContext('2d');
    
      //6.如何制作动画
      setInterval(draw,20);
    
      //7.偏移画布:重新设置画布原点0,0
      //结论:1)偏移量,宽和高分别是图形宽和高的一般
      //结论:2)图形位置要设置成偏移量*-1
      ctx.translate(100,50);
    
      //绘制函数:每20毫秒会执行一次
      function draw(){
        //3.橡皮清空画布
        ctx.clearRect(-200,-150,400,300);
        //4.普及数学角度和弧度
        //弧度和角度换算公式:弧度 = 角度 * Math.PI / 180
        //旋转30度
        ctx.rotate(1*Math.PI/180);
        //5.绘制一个矩形,位于0,0 ,宽高100
        ctx.fillRect(-100,-50,200,100);
      }
    </script>
    </body>
    </html>

    幸运转盘旋转案例:
    
    
    <!DOCTYPE html>
    <html ng-app="">
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            #lotteryContainer {
                text-align: center;
            }
            #startLottery{
                 280px;
                height: 3em;
                border: 1px solid #aaaaaa;
                border-radius: 8px;
                cursor: pointer;
                margin: 10px 0;
                outline: 0;
            }
            #startLottery:hover{
                background: #ccc;
            }
        </style>
        <script src="jquery-1.11.1.js"></script>
    </head>
    <body>
    <!--幸运转盘-->
    <div id="lotteryContainer">
        <canvas id="cvs" width="500" height="500"></canvas><br>
        <!--启动按钮-->
        <button id="startLottery">加载中...</button>
    </div>
    <script>
        var asImgLoaded = false;//标识符 指明转盘素材加载完成与否
        var pinImgLoaded = false;//指明指针加载完成与否
        var asImg;//圆盘图片对象
        var pinImg;//指针图片对象
        $(function(){
            //大转盘的图片
            asImg = new Image();
            asImg.src = 'img/as.png';
            //确认图片加载完成
            asImg.onload = function(){
                asImgLoaded = true;
                //判断指针加载完成执行初始化
                if(pinImgLoaded == true){
                    initLottery();
                }
            }
            //指针图片
            pinImg = new Image();
            pinImg.src = 'img/pin.png';
            pinImg.onload = function(){
                pinImgLoaded = true;
                //判断圆盘加载完成执行初始化
                if(asImgLoaded == true){
                    initLottery();
                }
            }
        });
        function initLottery(){
            //初始化按钮
            $('#startLottery').html('开始抽奖').click(function(){
                //生成一个随机的旋转时间,该时间在4000-9000毫秒之间
                var duration = (Math.random()*4+4)*1000;
                //转盘的开始旋转时间
                var startTime = new Date().getTime();
    
               //定义一个画布角度的变量,保存当前应当旋转的度数
                var angle = 0;//已经旋转过的角度,初始为0,表示不旋转
                //开始抽奖,转盘启动
                var timer = setInterval(function(){
                    ctx.clearRect(-cw/2,-ch/2,cw,ch);
                    //绘制圆盘和指针
                    //1.旋转画布
                    angle += 5;//记录转盘当前的旋转度数值
                    ctx.rotate(angle*Math.PI/180);
                    //2.画圆盘
                    ctx.drawImage(asImg,-cw/2,-ch/2);
                    //3.反向旋转画布
                    ctx.rotate(-angle*Math.PI/180);
                    //4.画指针
                    ctx.drawImage(pinImg,-cw/2+80,-ch/2+90);
                    //判断是否应该停止旋转了
                    var now = new Date().getTime();
                    if(now-startTime > duration){
                        //停止定时器
                        clearInterval(timer);
                    }
                },20);
            });
            //将转盘和指针绘制到canvas
            var cvs = $('#cvs')[0];
            var ctx = cvs.getContext('2d');
            //画布的款高
            var cw = cvs.width;
            var ch = cvs.height;
            //设置偏移
            ctx.translate(cw/2,ch/2);
            //画圆盘
            ctx.drawImage(asImg,-cw/2,-ch/2);
            ctx.drawImage(pinImg,-cw/2+80,-ch/2+90);
        }
    </script>
    </body>
    </html>
  • 相关阅读:
    穿出不一样的自己,做自己的高级定制服装师_豆瓣
    微信公众帐号开发。大家是用框架还是自己写的流程。现在遇到若干问题。请教各路大仙
    (Pre sell) ZOPO ZP998 (C2 II) 5.5 inch smart phone True Octa Core MTK6592 1920X1080 FHD screen 401 ppi 2GB/32GB 14.0Mp camera-in Mobile Phones from Electronics on Aliexpress.com
    内秀_百度百科
    Boost正则表达式库regex常用search和match示例
    怎样学习使用libiconv库
    libiconv_百度百科
    c++
    解决Boost.Regex对中文支持不好的问题
    毛料西服缩水了怎么办?_百度知道
  • 原文地址:https://www.cnblogs.com/liyuhuan/p/5498902.html
Copyright © 2011-2022 走看看