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 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
javascript中的注释使用与注意事项小结
Sep 20 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
Javascript:为input设置readOnly属性(示例讲解)
Dec 25 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
Sep 04 Javascript
浅谈vux之x-input使用以及源码解读
Nov 04 Javascript
react native 原生模块桥接的简单说明小结
Feb 26 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
Nov 02 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 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实现的封装验证码类详解
2013/06/18 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
sina的lightbox效果。
2007/01/09 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
Python获取网段内ping通IP的方法
2019/01/31 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
django 中QuerySet特性功能详解
2019/07/25 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
python将时分秒转换成秒的实例
2019/12/07 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
J2EE相关知识面试题
2013/08/26 面试题
大学旷课检讨书
2014/01/28 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
保护环境倡议书300字
2014/05/19 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2015年幼师工作总结
2015/04/28 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android