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 相关文章推荐
jQuery.prototype.init选择器构造函数源码思路分析
Feb 05 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
Mar 13 Javascript
AngularJS实现的锚点楼层跳转功能示例
Jan 02 Javascript
微信小程序日期选择器实例代码
Jul 18 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 Javascript
JavaScript如何把两个数组对象合并过程解析
Oct 10 Javascript
纯JS实现五子棋游戏
May 28 Javascript
vue实现循环滚动列表
Jun 30 Javascript
浅谈Vue的computed计算属性
Mar 21 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简单操作mysql数据库的类
2015/04/16 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
JS编程小常识很有用
2012/11/26 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
寻找网站后台地址的python脚本
2014/09/01 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Python descriptor(描述符)的实现
2020/11/15 Python
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
高二生物教学反思
2014/01/27 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
学历公证委托书
2014/04/09 职场文书
村级换届选举方案
2014/05/10 职场文书
校长四风对照检查材料
2014/09/27 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python