JS+html5 canvas实现的简单绘制折线图效果示例

对于实现折线图效果的示例,可以按照以下步骤进行:

步骤一:创建HTML页面

将canvas元素嵌入到HTML页面中,并且设置该元素的宽度和高度,为画布渲染做好准备。例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>绘制折线图效果</title>
</head>
<body>
    <canvas id="myCanvas" width="600" height="400"></canvas>
</body>
</html>

步骤二:创建JS脚本

第一步创建了HTML页面布局,下一步是实现JS脚本,使用HTML5的Canvas创建画布,并在画布上绘制折线图。JS可以按如下步骤展开:

  1. 获取HTML中的canvas元素并在js中使用它。

javascript
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

  1. 为画布设置参数,包括线条宽度、线条颜色和边缘样式。

javascript
ctx.lineWidth = 2;
ctx.strokeStyle = '#333';
ctx.lineCap = 'round';

  1. 创建数据集合并绘制到画布上。数据点可以在数组中以坐标对的形式传递,随后循环遍历这个数组并且将这些坐标对转换为画布上的坐标。

```javascript
let data = [
{ x: 0, y: 110 },
{ x: 40, y: 50 },
{ x: 80, y: 60 },
{ x: 120, y: 80 },
{ x: 160, y: 100 },
{ x: 200, y: 200 },
{ x: 240, y: 160 },
{ x: 280, y: 150 }
];

//绘制折线图的函数
function drawLine(chartData) {
ctx.beginPath();
ctx.moveTo(chartData[0].x, chartData[0].y);

   for (let i = 1; i < chartData.length; i++) {
       ctx.lineTo(chartData[i].x, chartData[i].y);
   }

   ctx.stroke();

}

drawLine(data);
```

此时,折线图就已经绘制完成了,可以运行脚本,查看绘制的效果。

示例说明一

下面的示例说明中,我们将会实现在鼠标点击生成数据,并且通过canvas对数据进行可视化的效果。实现方法如下:

  1. 在绑定鼠标点击事件时,需要先清空上一次绘制的画布内容。

javascript
canvas.addEventListener('click', function (e) {
data.push({ x: e.layerX, y: e.layerY });
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawLine(data);
});

  1. 清空画布已经使用过的函数是clearRect(),该函数清空给定矩形内的指定像素。

数据集的长度增加,画布中的折线图也随之扩张。

示例说明二

下面的示例说明中,我们将在折线图上增加点显示和提示框。实现方法如下:

  1. 增加提示框,平移当前坐标系到指定X、Y坐标,并添加单独的背景色、边框和文字颜色。

```javascript
function drawTooltip(x, y, text) {
let fontSize = 14;
let padding = 4;
let valueWidth = ctx.measureText(text).width;
let boxWidth = valueWidth + padding * 2;
let boxHeight = fontSize + padding * 2;

   ctx.save();
   ctx.beginPath();
   ctx.fillStyle = "#333";
   ctx.fillRect(x, y - boxHeight, boxWidth, boxHeight);

   ctx.strokeStyle = "#333";
   ctx.strokeRect(x, y - boxHeight, boxWidth, boxHeight);

   ctx.font = "bold " + fontSize + "px sans-serif";
   ctx.fillStyle = "#FFF";
   ctx.fillText(text, x + padding, y - padding);

   ctx.restore();

}
```

  1. 在所有数据点中遍历并绘制点。

javascript
for (let i = 0; i < data.length; i++) {
ctx.fillStyle = "#FFF";
ctx.beginPath();
ctx.arc(data[i].x, data[i].y, 3, 0, Math.PI * 2);
ctx.fill();
ctx.strokeStyle = "#333";
ctx.stroke();
}

  1. 展示提示框。

javascript
canvas.addEventListener('mousemove', function (e) {
for (let i = 0; i < data.length; i++) {
var dx = data[i].x - e.clientX + canvas.getBoundingClientRect().left;
var dy = data[i].y - e.clientY + canvas.getBoundingClientRect().top;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 10) {
drawTooltip(e.clientX - canvas.getBoundingClientRect().left + 10, e.clientY - canvas.getBoundingClientRect().top, data[i].x + ":" + data[i].y);
}
}
});

此时,折线图就具备了点和提示框的效果,同样通过鼠标hover或者click来查看每一个数据点的对应位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS+html5 canvas实现的简单绘制折线图效果示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Ajax的使用代码解析

    下面我将详细讲解“Ajax的使用代码解析”的完整攻略,包括Ajax的简介、使用步骤、示例代码解析等内容。 简介 Ajax 全名是“异步的 JavaScript 和 XML”(Asynchronous JavaScript and XML)。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的…

    jquery 2023年5月27日
    00
  • jQWidgets jqxDockPanel布局事件

    以下是关于“jQWidgets jqxDockPanel布局事件”的完整攻略,包含两个示例说明: 事件简介 jqxDockPanel 控件 layout 事件布局发生变化时触发。该事件的回调函数接收两个参数:event 和 layout。其中,event 表示事件对象,layout 表示当前布局的信息。事件的语法如下: $("#jqxDockPan…

    jquery 2023年5月10日
    00
  • jQWidgets jqxFileUpload render()方法

    jQWidgets jqxFileUpload render() 方法 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具包括表格、日、下拉菜单等。jqxFileUpload是jQWidgets中的一个组件,用于实现文件上传功能。render()方法是jqxFileUpload中的一个方法,用于渲染组件。 render()方法的…

    jquery 2023年5月9日
    00
  • 如何让你的Lightbox支持滚轮缩放及Base64图片

    下面是让Lightbox支持滚轮缩放及Base64图片的完整攻略。 1. 支持滚轮缩放 1.1 将Lightbox更新至最新版 首先,要确保你使用的Lightbox插件版本是最新的。因为较老的版本可能没有支持滚轮缩放的功能。 1.2 加载Mousewheel插件 在启用Lightbox之前,你需要先引入mousewheel插件。该插件可以让Lightbox支…

    jquery 2023年5月18日
    00
  • asp.net使用jQuery Uploadify上传附件示例

    下面是使用jQuery Uploadify上传附件的完整攻略。 步骤一:引入jQuery和Uploadify插件 在网页中引入jQuery和Uploadify插件。可以通过以下方式引入: <!– 引入jQuery –> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/…

    jquery 2023年5月28日
    00
  • jQWidgets jqxGauge LinearGauge colorScheme属性

    jQWidgets jqxGauge LinearGauge colorScheme属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI件和工具,包括格、图、日历、菜单等。jqxauge和xLinearGauge是jQWidgets中的两个组件,于显示仪表盘和线性仪表盘。这个组件都提供colorScheme属性,用于设置色方案。 col…

    jquery 2023年5月9日
    00
  • jQWidgets jqxTree宽度属性

    jQWidgets jqxTree 宽度属性 jqxTree 是 jQWidgets 提供的一个树形组件,它可以展示层级结构的数据支持多种交互。jqxTree 提供了 width 属性用于设置树形组件的宽度。 width 属性 width 属性用于设置树形组件的宽度。该属性接受一个数字或作为参数,表示树形组件的宽度。如果设置为数字,则表示像素值;如果为字符串…

    jquery 2023年5月11日
    00
  • jQWidgets jqxValidator规则属性

    下面是对于“jQWidgets jqxValidator规则属性”的详细讲解和示例说明。 标题 一、什么是jqxValidator规则属性 jqxValidator规则属性是jQWidgets中的一个验证组件,可以验证文本输入框中的输入内容是否符合要求。通过设置规则属性,可以限制输入字符数、验证邮箱、网址、数字等内容。 二、jqxValidator规则属性的…

    jquery 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部