要展现一种数据,最直观的方式便是生成数据图,图例永远要比文字说明更加的清晰明了。因此,今天来生成一个利用canvas画布上的柱状图。

首先,先设置一个x,y轴,以便于柱状图的生成

var canvas = document.getElementById('mycanvas')

var ctx = canvas.getContext('2d')

//获取画布的id。以及声明画布的书写方式为2d

//创建备用的数据

var data = {

x: ["一月", "二月", "三月", "四月", "五月", "六月"],

y: ["0", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000"],

val: ["300", "210", "120", "560", "800", "660"],

col: ["red", "green", "blue", "skyblue", "limegreen", "pink"]

}

//画出x,y轴,并提前设置居中样式

ctx.translate(10, 900)

ctx.beginPath();

ctx.moveTo(10, 0);

ctx.lineTo(810, 0);

ctx.strokeStyle = 'blue';

ctx.closePath()

ctx.stroke()

ctx.beginPath();

ctx.moveTo(10, 0);

ctx.lineTo(10, -800);

ctx.strokeStyle = 'blue';

ctx.closePath()

ctx.stroke()

ctx.textAlign='center';

ctx.textBaseline='middle'

准备完成后,开始绘出柱状图

for (var i = 0; i < data.val.length; i++) {

ctx.beginPath();

ctx.moveTo(60 * (i + 1), 0);

//画出柱状图的位置,并给柱状图设置一个宽度

ctx.lineWidth = 40;

ctx.lineTo(60 * (i + 1), -data.val[i] / (10 / 8));

//按照比例对柱状图实际的尺寸进行缩小

ctx.strokeStyle = data.col[i];

//将数据,以及x轴参照数据点写入

ctx.fillText(data.x[i],60*(i+1),-data.val[i]/(10/8)-10)

ctx.closePath()

ctx.stroke()

}

绘制出y轴的数据点

for (var j = 0; j < data.y.length; j++) {

ctx.beginPath();

ctx.moveTo(0, -80*j);

ctx.lineTo(10, -80 * j);

ctx.fillText(data.y[j],20,-80*j)

ctx.strokeStyle = 'blue';

ctx.closePath();

ctx.stroke();

}

完整代码:

Document

var canvas = document.getElementById('mycanvas')

var ctx = canvas.getContext('2d')

//获取画布的id。以及声明画布的书写方式为2d

//创建备用的数据

var data = {

x: ["一月", "二月", "三月", "四月", "五月", "六月"],

y: ["0", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000"],

val: ["300", "210", "120", "560", "800", "660"],

col: ["red", "green", "blue", "skyblue", "limegreen", "pink"]

}

//画出x,y轴,并提前设置居中样式

ctx.translate(10, 900)

ctx.beginPath();

ctx.moveTo(10, 0);

ctx.lineTo(810, 0);

ctx.strokeStyle = 'blue';

ctx.closePath()

ctx.stroke()

ctx.beginPath();

ctx.moveTo(10, 0);

ctx.lineTo(10, -800);

ctx.strokeStyle = 'blue';

ctx.closePath()

ctx.stroke()

ctx.textAlign='center';

ctx.textBaseline='middle'

for (var j = 0; j < data.y.length; j++) {

ctx.beginPath();

ctx.moveTo(0, -80*j);

ctx.lineTo(10, -80 * j);

ctx.fillText(data.y[j],20,-80*j)

ctx.strokeStyle = 'blue';

ctx.closePath();

ctx.stroke();

}

for (var i = 0; i < data.val.length; i++) {

ctx.beginPath();

ctx.moveTo(60 * (i + 1), 0);

//画出柱状图的位置,并给柱状图设置一个宽度

ctx.lineWidth = 40;

ctx.lineTo(60 * (i + 1), -data.val[i] / (10 / 8));

//按照比例对柱状图实际的尺寸进行缩小

ctx.strokeStyle = data.col[i];

//将数据,以及参照数据点写入

ctx.fillText(data.x[i],60*(i+1),-data.val[i]/(10/8)-10)

ctx.closePath()

ctx.stroke()

}

用html5做的柱状图,使用h5新特性canvas简单生成一个柱状图相关推荐

  1. html5新特性表单控件,老生常谈h5新特性1:(表单)

    老生常谈h5新特性1:(表单) HTML5新特性 -- 十大新特性 (1)新的语义标签和属性 (2)表单新特性 (3)视频和音频 (4)Canvas绘图 (5)SVG绘图 (6)地理定位 (7)拖放A ...

  2. 前端16天--IFC、BFC、H5新特性、选择器、伪类元素、扩展盒模型、圆角、盒子阴影等--2021/4/21

    前端16天–IFC.BFC.H5新特性–2021/4/21 HTML5是HTML标准的最新演进版本: 1.是一个新的HTML语言版本包含了新的元素.属性和行为. 2.同时包含了一系列可以被用来让web ...

  3. 前端面试题二:ES6/7/8新特性、性能优化、数据交互、H5新特性

    目录 一.ES6/7/8新特性 二.性能优化 三.数据交互 四.H5新特性 一.ES6/7/8新特性 1.ES6中新增了哪些数据类型? Symbol类型(基本) Set类型(复杂) Map类型(复杂) ...

  4. 【面试】面试官:说一说H5新特性

    H5 新特性 1.拖拽释放(Drap and drop) API ondrop拖放是一种常见的特性,即抓取对象以后拖到另一个位置 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放 2.自定义 ...

  5. H5新特性(一)——音视频标签

    H5新特性--音视频标签 大家都有在网页中浏览音频和视频的经历,在HTML5之前,对视频和音频没有一个标准,因此在网页中看到的视频,都是通过第三插件的方式嵌入的,可能是QuickTime,也可能是 R ...

  6. h5新特性DOMAST的简单理解

    h5新特性 1.一些语义化标签 header.footer.nav.aside.article.section.hgroup(h1~h6的集合) document.createElement('hea ...

  7. html5新特性 gps,老生常谈H5新特性:地理定位

    HTML5新特性 1.新的语义标签 2.表单2.0 3.视频和音频 4.Canvas绘图 5.SVG绘图 6.地理定位 7.拖放API 8.WebWorker 9.WebStorage 10.WebS ...

  8. 前端面试html5新特性,前端面试基础-html篇之H5新特性

    h用能境战求道,重件开又是正易里是了些之框5的新特性(目前个人所了解)如求圈分件圈浏第用代是水刚道.的它还下 语义化标签 表单新特性 视频(vi朋不功事做时次功好来多这开制的请一例农在deo)和音频( ...

  9. HTML5学习01-基础讲解、新特性

    一.基础讲解 二.新特性 三.兼容性 HTML5为了保证兼容前面各个版本,语法达到了最大程度的兼容设计. (1).不允许写结束标记的元素: area.base.br.col.command.embed ...

最新文章

  1. vim/vi的使用(Ubuntu12.04)
  2. swiper左右切换按钮无效_BMD为ATEM切换台发布新的2 M/E和4M/E控制面板
  3. python loop call soon_python3-asyncio 学习笔记 1 -- call_soon
  4. oracle 取整的几种方法
  5. 基于NEO的私链(Private Blockchain)
  6. Windows系统下,好用的录屏软件工具/屏幕录制工具
  7. 中国制造2025变革,背后的大数据来龙去脉
  8. Nexus 安装 使用说明
  9. 用FPGA实现视频中物体边缘二值化
  10. jfinal中使用freemarker
  11. Junit学习笔记(二): 源码分析(2)-命令和组合模式
  12. poi实现Excel文件导出【SpringBoot篇】
  13. 正则表达式的语法汇总
  14. 计算机产品校园营销方案,惠普笔记本电脑校园营销策划方案.doc
  15. Hugo Travis
  16. 解决IOP 使用latex模板出现iopart.cls及setstack.sty未找到的问题,环境为texlive+texstudio
  17. 关于PDU电源插座,你了解多少?
  18. 怎样让手机打电话显示不在服务器,不想接电话,不想开飞行模式,教你一招打电话手机变空号...
  19. 查询注册表的命令行工具reg
  20. 一次与sql注入 webshell 的美丽“邂逅”

热门文章

  1. 现代氧吧智能云音响,为何京东众筹能破百万
  2. lamp mysql大小限制_LAMP---Mysql 参数说明
  3. mybatis 分页
  4. 本地储存 localstorage sessionstorage 的兼容性,API,特点
  5. iOS 把数据库文件打包到mainbundle中,查找不到路径的解决办法
  6. JS 当前日期减一天
  7. 双非计算机科学与技术大学排行,这2所双非大学,计算机专业全国有名,实力不输211,考上就赚!...
  8. 最新UI界面漫画小程序源码,带后台支持流量主,全自动更新
  9. 合并图层和拼合图稿,锁定与解锁图层,显示与隐藏图层,剪切蒙版,了解图层样式面板,创建图形样式,编辑图形样式
  10. 创作手机短片技巧总结