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效率个人经验谈(8-15更新),加入range技巧
Jan 09 Javascript
符合W3C网页标准的iframe标签的使用方法
Jul 19 Javascript
JavaScript学习笔记(十)
Jan 17 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 Javascript
JavaScript引用类型和基本类型详解
Jan 06 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
Apr 06 Javascript
jQuery Mobile 和 Kendo UI 的比较
May 05 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
jQuery EasyUI 页面加载等待及页面等待层
Feb 06 Javascript
js传递数组参数到后台controller的方法
Mar 29 Javascript
vue 组件的封装之基于axios的ajax请求方法
Aug 11 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
php横向重复区域显示二法
2008/09/25 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Python 错误和异常小结
2013/10/09 Python
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
《Python学习手册》学习总结
2018/01/17 Python
pandas中去除指定字符的实例
2018/05/18 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
python实现中文文本分句的例子
2019/07/15 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
用Python开发app后端有优势吗
2020/06/29 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
2014年学习雷锋活动总结
2014/03/01 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
工程安全生产协议书
2014/11/21 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
安全承诺书格式范本
2015/04/28 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python