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 表格隔行颜色
Dec 02 Javascript
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
基于jquery的二级联动菜单实现代码
Apr 25 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
浅析Node在构建超媒体API中的作用
Jul 30 Javascript
JavaScript中switch判断容易犯错的一个细节
Aug 27 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
JS返回只包含数字类型的数组实例分析
Dec 16 Javascript
详解React Native顶|底部导航使用小技巧
Sep 14 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
Sep 10 Javascript
js实现带有动画的返回顶部
Aug 09 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php时区转换转换函数
2014/01/07 PHP
PHP session 会话处理函数
2016/06/06 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
Python中异常重试的解决方案详解
2017/05/05 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
python 装饰器的基本使用
2021/01/13 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
领导干部作风建设总结
2014/10/23 职场文书
顶岗实习计划书
2015/01/16 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android