• cancas绘制折线图


    知识点回顾:

    知识点1:

    measureText() 方法返回包含一个对象,该对象包含以像素计的指定字体宽度。

    提示:如果您需要在文本向画布输出之前,就了解文本的宽度,那么请使用该方法。

    JavaScript 语法:context.measureText(text).width;

    text是要测量的文本;

    知识点2:

     

    illText() 方法在画布上绘制填色的文本。文本的默认颜色是黑色。

     

    提示:使用 font 属性来定义字体和字号,并使用 fillStyle 属性以另一种颜色/渐变来渲染文本。

     

    JavaScript 语法:context.fillText(text,x,y,maxWidth);

     

    参数值

     

    参数描述
    text 规定在画布上输出的文本。
    x 开始绘制文本的 x 坐标位置(相对于画布)。
    y 开始绘制文本的 y 坐标位置(相对于画布)。
    maxWidth 可选。允许的最大文本宽度,以像素计。

     

     

     

     


     1 <!doctype html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8 <div id="container">
     9     <canvas id="can">
    10         你的浏览器不支持canvas,请升级浏览器
    11     </canvas>
    12 </div>
    13 <script>
    14    var canvas=document.getElementById('can');
    15     var ctx=canvas.getContext('2d');
    16    canvas.width=800;
    17    canvas.height=600;
    18 //   给定的点
    19    nums = [268,1236,1273,1545,1988];
    20    datas = ["11.1-11.2","11.3-11.9","11.10-11.16","11.17-11.23","11.24-11.30"];
    21    //画出坐标线
    22     function drawBorder(){
    23         var arrowWidth=10;
    24         ctx.beginPath();
    25         ctx.moveTo(100,550);
    26         ctx.lineTo(700,550);
    27         ctx.lineTo(700-arrowWidth,550-arrowWidth);
    28         ctx.lineTo(700,550);
    29         ctx.lineTo(700-arrowWidth,550+arrowWidth);
    30         ctx.stroke();
    31         ctx.beginPath();
    32         var arrowWidth=10;
    33         ctx.moveTo(100,550);
    34         ctx.lineTo(100,10);
    35         ctx.lineTo(100-arrowWidth,50+arrowWidth);
    36         ctx.lineTo(100,10);
    37         ctx.lineTo(100+arrowWidth,50+arrowWidth);
    38         ctx.stroke();
    39     }
    40    //画出折线
    41    function drawLine(){
    42        //因为5个点,只要画出4条折线,因此只需要nums.length-1;
    43        for(var i=0;i<nums.length-1;i++){
    44            //起始坐标
    45            var numsX=i*100+150;//x坐标是从100起始的;x轴长500;将600坐标同等分为5份;;
    46            var numsY=550-nums[i]/5;//y坐标是从50起始的;y轴长500;从550开始同比例缩放5倍;
    47            //终止坐标
    48            var numsNx=(i+1)*100+150;
    49            var numsNy=550-nums[i+1]/5;
    50            ctx.beginPath();
    51            ctx.moveTo(numsX,numsY);
    52            ctx.lineTo(numsNx,numsNy);
    53            ctx.lineWidth=6;
    54            ctx.strokeStyle='skyblue';
    55            ctx.closePath();
    56            ctx.stroke();
    57        }
    58    }
    59    //绘制折线点的菱形和数值,横坐标值,纵坐标值
    60    function drawBlock(){
    61        for(var i=0;i<nums.length;i++){
    62            var numsY = 550-nums[i]/5;
    63            var numsX = i*100+150;
    64            ctx.beginPath();
    65            // 画出折线上的方块
    66            ctx.moveTo(numsX-4,numsY);
    67            ctx.lineTo(numsX,numsY-4);
    68            ctx.lineTo(numsX+4,numsY);
    69            ctx.lineTo(numsX,numsY+4);
    70            ctx.fill();
    71            ctx.font= "15px scans-serif";
    72            ctx.fillStyle='black';
    73            // 画出折线上的方块完毕
    74            //折线上的点值
    75            var text=ctx.measureText(nums[i]);
    76            ctx.fillText(nums[i],numsX-text.width,numsY-10);
    77            //绘制纵坐标
    78            var colText=ctx.measureText((nums.length-i)*500);
    79            ctx.fillText((nums.length-i)*500,90-colText.width,i*100+55);
    80            //绘制横坐标并判断
    81            if(i<5){
    82                var rowText=ctx.measureText(datas[i]);
    83                ctx.fillText(datas[i],numsX-rowText.width/2,570);
    84            }else if(i==5){
    85                return;
    86            }
    87            ctx.closePath();
    88            ctx.stroke();
    89 
    90        }
    91    }
    92     drawBorder();
    93    drawLine();
    94    drawBlock();
    95 </script>
    96 
    97 </body>
    98 </html>

    效果图如下:

  • 相关阅读:
    mysql优化三
    mysql优化一
    mysql索引二
    mysql索引
    php连接sql2005
    Android studio 自动导入(全部)包 import (转)
    Android启动页面的正确打开方式 (转载)
    coursera 视频总是缓冲或者无法观看的解决办法(Windows 和 Linux 系统 环境)
    最新解决 Ubuntu16.04 和 win10 双系统时间同步问题 (设置为 UTC 时间)
    2017年12月 六级成绩 留念
  • 原文地址:https://www.cnblogs.com/yangguoe/p/7907538.html
Copyright © 2020-2023  润新知