• 利用画布绘制折线图


    HTML5中<canvas>标签用于绘制图像

       不过<canvas>元素本身并没有绘制能力,这是我们需要通过getContext()方法返回一个对象,该对象提供了用于在画布上绘图的方法和属性。

      getContext("2d") 对象属性和方法,可用于在画布上绘制文本、线条、矩形、圆形等等。在这里我们绘制一个折线图。

    首先在body中创建一个画布,并声明一个ctx的变量

    <body>
    <canvas width="600" height="400"></canvas>
    <script type="text/javascript">
    var myline = document.querySelector("canvas");
    var ctx = myline.getContext("2d");

    为了视觉效果,可在画布中绘制一个网格背景,该网格可利用for()循环来创建,首先声明网格的间距和画布的大小

    var griadSize = 10;
    var canvasW = ctx.canvas.width;
    var canvasH = ctx.canvas.height;
    var xNum = parseInt(canvasH/griadSize);
    var yNum = parseInt(canvasW/griadSize);

    再利用for()循环

    for(var i = 0 ;i < xNum;i++){
    ctx.moveTo(0,griadSize*i-0.5);
    ctx.lineTo(canvasW,griadSize*i-0.5);
    ctx.strokeStyle = "#eee";
    ctx.stroke();
    }
    for(var j = 0 ;j < yNum;j++){
    ctx.moveTo(griadSize*j-0.5,0);
    ctx.lineTo(griadSize*j-0.5,canvasW);
    ctx.strokeStyle = "#eee";
    ctx.stroke();
    }

    然后再在创建X轴和Y轴

    //坐标X轴
    ctx.beginPath();
    var grad = 20;
    var x0 = grad;
    var y0 = canvasH-grad;
    var tra = 10;
    ctx.moveTo(x0,y0);
    ctx.lineTo(canvasW-2*grad,y0);
    ctx.lineTo(canvasW-2*grad-tra,y0-tra/2);
    ctx.lineTo(canvasW-2*grad-tra,y0+tra/2);
    ctx.lineTo(canvasW-2*grad,y0);
    ctx.strokeStyle = "#000000";
    ctx.fillStyle = "#000000";
    ctx.fill();
    ctx.stroke();
    ctx.font = "20px 微软雅黑";
    ctx.textBaseline = "middle";
    ctx.fillText("X",canvasW-2*grad,canvasH-grad);
    
    //坐标Y轴
    ctx.moveTo(x0,y0);
    ctx.lineTo(x0,2*grad);
    ctx.lineTo(x0-tra/2,2*grad+tra);
    ctx.lineTo(x0+tra/2,2*grad+tra);
    ctx.lineTo(x0,2*grad);
    ctx.strokeStyle = "#000000";
    ctx.fillStyle = "#000000";
    ctx.fill();
    ctx.stroke();
    ctx.font = "20px 微软雅黑";
    ctx.textAlign="center";
    ctx.fillText("Y",x0,2*grad-tra);

    创建好之后由数据包导入数据

    var arr = [
    {
    x:0,
    y:0
    },
    {
    x:50,
    y:80
    },
    {
    x:100,
    y:140
    },
    {
    x:200,
    y:120
    },
    {
    x:250,
    y:200
    },
    {
    x:300,
    y:180
    },
    {
    x:450,
    y:200
    },
    {
    x:480,
    y:300
    },
    ];
    ctx.beginPath();
    for(var k = 0;k < arr.length;k++){
    ctx.lineTo(x0+arr[k].x-0.5,y0-arr[k].y-0.5);
    ctx.fillRect(x0+arr[k].x-2,y0-arr[k].y-2,4,4);
    ctx.strokeStyle = "#00f";
    ctx.stroke();
    ctx.font = "15px 微软雅黑";
    ctx.textAlign="center";
    ctx.textBaseline = "middle";
    if(arr[k].x == 0 && arr[k].y == 0){
    ctx.fillText("",0,0);
    }else{
    ctx.fillText(("("+arr[k].x+","+arr[k].y+")"),x0+arr[k].x+17,y0-arr[k].y+15);
    }
    ctx.fillStyle="#00f";
    }

    效果图:

  • 相关阅读:
    QT自定义控件插件化简要概述
    wildfly9 配置SSL单向认证/https
    wildfly-9.0.2 web项目部署详细步骤
    SQL Server 2008 数据库日志文件丢失处理方法
    win7 64位系统 pl/sql 无法解析指定的连接标识符解决办法
    mybatis 应用参考
    去除浏览器下jquey easyui datagrid、combotree 缓存问题
    java 页面url传值中文乱码的解决方法
    jasperreports-5.6 + jaspersoftstudio-5.6 生成pdf 文件中文无法正常显示问题
    HTML5实现在线抓拍
  • 原文地址:https://www.cnblogs.com/zhen-prz/p/10098026.html
Copyright © 2020-2023  润新知