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 05 Javascript
理解Javascript_14_函数形式参数与arguments
Oct 20 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
Dec 15 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
Oct 29 Javascript
Jquery zTree 树控件异步加载操作
Feb 25 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
Angular 4.x中表单Reactive Forms详解
Apr 25 Javascript
基于angular2 的 http服务封装的实例代码
Jun 29 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
vue操作下拉选择器获取选择的数据的id方法
Aug 24 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 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学习之正则表达式
2011/04/17 PHP
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
js模拟点击事件实现代码
2012/11/06 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
5款非常棒的Python工具
2018/01/05 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Python如何发送与接收大型数组
2020/08/07 Python
植物选择:Botanic Choice
2017/02/15 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
遗嘱公证书标准样本
2014/04/08 职场文书
说明书格式及范文
2014/05/07 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Redis Cluster 集群搭建你会吗
2021/08/04 Redis