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 相关文章推荐
Gird事件机制初级读本
Mar 10 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
May 23 Javascript
编写自己的jQuery提示框(Tip)插件
Feb 05 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
微信小程序 toast 详解及实例代码
Nov 09 Javascript
实例浅析js的this
Dec 11 Javascript
vue2.0 循环遍历加载不同图片的方法
Mar 06 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
Mar 09 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 jQuery
node.js +mongdb实现登录功能
Jun 18 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
Jul 21 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查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
Symfony核心类概述
2016/03/17 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
JS实现购物车特效
2017/02/02 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python虚拟环境迁移方法
2019/01/03 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
骨干教师事迹材料
2014/12/17 职场文书