原生js实现折线图(canvas详解)

这篇文章的起源就是之前用的都是ECharts突然有一天想自己用js手写一个折线图,所以我就从canvas开始学习了。
首先给大家看一下通过学习,我最后完成的折线图:
在这里插入图片描述
内容:

  1. x轴及平行刻度线
  2. x轴、y轴坐标刻度
  3. 折点的数据显示

缺点:

  1. 线条样式的动态变换
  2. y轴刻度算法
  3. 一点都不酷炫!!!

一、Canvas介绍

前言:canvas元素本身并没有绘制能力的,它仅仅是图形的容器,而getContext()方法返回一个对象,该对象提供了用于在画布上绘图的方法和属性。

1、画布的创建

//HTML部分
<canvas id="mycanvas"></canvas>

const canvas = document.getElementById("mycanvas");
const context = canvas.getContext("2d");

document.getElementById():获取canvas容器标签
canvas.getContext(“2d”):获取绘制对象

2、设置画布的宽高和背景色

在这里插入图片描述

//HTML部分
<canvas id="mycanvas"></canvas>

const canvas = document.getElementById("mycanvas");
canvas.width = 500;
canvas.height = 300;
const context = canvas.getContext("2d");
context.fillStyle = "rgb(93,111,194)";
context.fillRect(0,0,canvas.width,canvas.height);

canvas.width 设置画布的宽;
canvas.height 设置画布的高;
context.fillStyle 设置填充绘画的颜色、渐变或模式;(说白了就是把画笔染成什么颜色)
context.fillRect(x,y,width,height) 绘制“已填色”的矩形。默认的填充颜色是黑色;(用设置的颜色或者默认颜色画出图形)

参数 描述
x 矩形左上角的 x 坐标
y 矩形左上角的 y 坐标
width 矩形的宽度,以像素计
height 矩形的宽度,以像素计

3、设置渐变色

3.1、线性渐变

在这里插入图片描述

//HTML部分
<canvas id="mycanvas"></canvas>

const canvas = document.getElementById("mycanvas");
canvas.width = 500;
canvas.height = 300;
const context = canvas.getContext("2d");
const gradient = context.createLinearGradient(0, 0, canvas.width,0);
gradient.addColorStop(0  ,"rgb(255,0,0)");
gradient.addColorStop(0.2,"rgb(255,165,0)");
gradient.addColorStop(0.3,"rgb(255,255,0)");
gradient.addColorStop(0.6,"rgb(0,255,0)");
gradient.addColorStop(0.7,"rgb(0,127,255)");
gradient.addColorStop(0.8,"rgb(0,0,255)");
gradient.addColorStop(1.0,"rgb(139,0,255)");
context.fillStyle = gradient;
context.fillRect(0,0,canvas.width,canvas.height);

createLinearGradient(x0,y0,x1,y1):
(x0,y0)连接(x1,y1)方向上进行渐变
gradient.addColorStop(stop,color);

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在 Canvas 中绘制折线图,可以按照以下步骤进行: 1. 准备数据:折线图需要一组数据来表示不同时间或条件下的数值。你可以自己编写一些数据,或者使用现成的数据。 2. 设置 Canvas:在 HTML 中创建一个 Canvas 元素,并设置其宽度和高度。你也可以设置其样式和其他属性。 3. 绘制坐标轴:折线图通常包括 x 轴和 y 轴,需要在 Canvas 中绘制这些坐标轴。可以使用 Canvas 的线条绘制方法绘制直线。 4. 绘制数据点:将数据点绘制在 Canvas 上。可以使用 Canvas 的圆形绘制方法绘制数据点。 5. 绘制折线:将数据点之间的连线绘制在 Canvas 上,形成一条折线。可以使用 Canvas 的线条绘制方法绘制折线。 以下是一个简单的绘制折线图的示例代码: ```html <canvas id="myCanvas" width="500" height="300"></canvas> <script> var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); // 准备数据 var data = [5, 10, 8, 15, 20, 12]; // 绘制 x 轴和 y 轴 ctx.beginPath(); ctx.moveTo(50, 250); ctx.lineTo(450, 250); ctx.moveTo(50, 250); ctx.lineTo(50, 50); ctx.stroke(); // 绘制数据点 for (var i = 0; i < data.length; i++) { ctx.beginPath(); ctx.arc(50 + i * 70, 250 - data[i] * 10, 5, 0, Math.PI * 2); ctx.fill(); } // 绘制折线 ctx.beginPath(); ctx.moveTo(50, 250 - data[0] * 10); for (var i = 1; i < data.length; i++) { ctx.lineTo(50 + i * 70, 250 - data[i] * 10); } ctx.stroke(); </script> ``` 在这个示例中,我们准备了一组数据,绘制了 x 轴和 y 轴,绘制了数据点,最后绘制了折线。你可以根据需要修改数据和绘图参数来绘制自己的折线图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值