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 相关文章推荐
innerHTML,outerHTML,innerTEXT三者之间的区别
Jan 28 Javascript
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
Sep 14 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
Sep 04 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
AngularJS在IE8的不支持的解决方法
May 13 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
详解vee-validate的使用个人小结
Jun 07 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
js数组方法reduce经典用法代码分享
Jan 07 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
Oct 25 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下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
PHP类的反射用法实例
2014/11/03 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
vue实现图片上传功能
2020/05/28 Javascript
Python中的__slots__示例详解
2017/07/06 Python
Django分页功能的实现代码详解
2019/07/29 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
什么是makefile? 如何编写makefile?
2012/08/08 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
高中自我评价分享
2013/12/05 职场文书
高职教师岗位职责
2013/12/24 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
员工自我工作评价
2015/03/06 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
开展警示教育活动总结
2015/05/09 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技