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


Posted in Javascript onMarch 13, 2017

本文实例讲述了JS+html5 canvas实现的简单绘制折线图效果。分享给大家供大家参考,具体如下:

1、实例代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <title>画图</title>
    <style>
      #divContainer{
        margin-top: 20px;
        text-align: center;
      }
      #cv{
        width: 300px;
        height: 200px;
        border-bottom: 2px solid #000;
        border-left: 2px solid #000;
      }
    </style>
  </head>
  <body>
    <div id="divContainer">
      铝锭价走势图<br/>
      <canvas id="cv">你的设备不支持图表数据显示</canvas>
    </div>
    <script>
      (function(){
        window.onload = function(){
          //数据源
          var dict = [
            {x: "2015-04-24", y: 13400},
            {x: "2015-04-25", y: 13380},
            {x: "2015-04-26", y: 13370},
            {x: "2015-04-27", y: 13370},
            {x: "2015-04-28", y: 13380}
          ]
          //数据源提取
          var len = dict.length;
          var xArr = [], yArr = [], tmp_yArr = [];
          for(var i=0; i<len; i++){
            xArr.push(i * 60);
            tmp_yArr.push(dict[i].y);
          }
          var tmp_minY = Math.min.apply(Math, tmp_yArr);//最小值
          var tmp_maxY = Math.max.apply(Math, tmp_yArr);//最大值
          if(tmp_maxY - tmp_minY <= 100){
            for(var i=0; i<len; i++){
              yArr.push(tmp_yArr[i] - tmp_minY + 50);//与最小的做比较
            }
          }
          else{//如果相差太大会导致图表不美观
            for(var i=0; i<len; i++){
              yArr.push(tmp_yArr[i] / 500);
            }
          }
          var minY = Math.min.apply(Math, yArr);
          var maxY = Math.max.apply(Math, yArr);
          //canvas 准备
          var canvas = document.getElementById("cv");//获取canvas画布
          var ctx = canvas.getContext("2d");
          //画折线
          for(var i=0 ;i<len; i++){
            var x = xArr[i];
            var y = maxY - yArr[i] + minY;
            if(i === 0){
              ctx .moveTo(x, y);
            }
            else{
              ctx .lineTo(x, y);
            }
          }
          ctx .stroke();
          //画点
          for(var i=0; i<len; i++){
            var x = xArr[i];
            var y = maxY - yArr[i] + minY;
            var xMemo = dict[i].x;
            var yMemo = "¥" + dict[i].y;
            ctx.beginPath();
            ctx.fillStyle = "#000";
            ctx.arc(x, y, 2, 0, 2*Math.PI);//画点
            ctx.fill();
            ctx.fillText(yMemo, x + 3, y - 10);
            ctx.fillText(xMemo, x + 3, canvas.height - 10, 40);//画文字
          }
        }
      })();
    </script>
  </body>
</html>

2、运行效果图如下:

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

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
动态的9*9乘法表效果的实现代码
May 16 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
koa上传excel文件并解析的实现方法
Aug 09 Javascript
浅谈vue 单文件探索
Sep 05 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
微信小程序template模板与component组件的区别和使用详解
May 22 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 Javascript
JS实现含有中文字符串的友好截取功能分析
Mar 13 #Javascript
JS实现直接运行html代码的方法
Mar 13 #Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 #Javascript
jsonp跨域请求实现示例
Mar 13 #Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
Mar 13 #Javascript
H5实现中奖记录逐行滚动切换效果
Mar 13 #Javascript
jQuery实现页面倒计时并刷新效果
Mar 13 #Javascript
You might like
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
vue v-model的用法解析
2020/10/19 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
python刷投票的脚本实现代码
2014/11/08 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python自动登录QQ的实现示例
2020/08/28 Python
如何在pycharm中安装第三方包
2020/10/27 Python
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
幼儿园教师获奖感言
2014/03/11 职场文书
挂职学习心得体会
2014/09/09 职场文书
给病人的慰问信
2015/03/23 职场文书
项目战略合作意向书
2015/05/08 职场文书
军训通讯稿范文
2015/07/18 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
MySQL 时间类型的选择
2021/06/05 MySQL