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 相关文章推荐
javascript显示隐藏层比较不错的方法分析
Sep 30 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 Javascript
js实时监听文本框状态的方法
Apr 26 Javascript
Node.js 的异步 IO 性能探讨
Oct 08 Javascript
JS模式之单例模式基本用法
Jun 30 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
JS实现拖动滚动条评分的效果代码分享
Sep 29 Javascript
JavaScript递归操作实例浅析
Oct 31 Javascript
easy ui datagrid 从编辑框中获取值的方法
Feb 22 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
YII框架关联查询操作示例
2019/04/29 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
js控制input框只读实现示例
2014/01/20 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
django实现用户登陆功能详解
2017/12/11 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Python笔记之facade模式
2019/11/20 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Java的基础面试题附答案
2016/01/10 面试题
建筑施工员岗位职责
2013/11/26 职场文书
总裁办公室主任职责
2014/01/02 职场文书
年终考核实施方案
2014/05/26 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书