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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
关于jquery中全局函数each使用介绍
Dec 10 Javascript
javascript创建函数的20种方式汇总
Jun 23 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
微信小程序 页面传参实例详解
Nov 16 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
express如何使用session与cookie的方法
Jan 30 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
vue.js计算属性computed用法实例分析
Jul 06 Javascript
OpenLayers3实现测量功能
Sep 25 Javascript
vue实现倒计时功能
Mar 24 Vue.js
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 SplObjectStorage使用实例
2015/05/12 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
django允许外部访问的实例讲解
2018/05/14 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
在python shell中运行python文件的实现
2019/12/21 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
python FTP编程基础入门
2021/02/27 Python
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
通信研究生自荐信
2014/02/01 职场文书
小学毕业感言500字
2014/02/28 职场文书
捐赠仪式主持词
2014/03/19 职场文书
周年庆典主持词
2014/04/02 职场文书
开工典礼策划方案
2014/05/23 职场文书
2015年公司新年寄语
2014/12/08 职场文书
家长会欢迎词
2015/01/23 职场文书
城管年度个人总结
2015/02/28 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
铁人观后感
2015/06/16 职场文书