HTML5 canvas燃尽图
来源:互联网 发布:淘宝宝贝的营销词 编辑:程序博客网 时间:2024/06/14 01:06
先说说这个demo的灵感来源。
我以前有一同事,技术在我心目中算是非常厉害的那种,我这一年多来的技术提高基本上完全靠他所赐,再次对他表示深深的感谢啊!
一次偶然的机会,让我见识了他的前端博客,其中里边有一个demo给我的印象特别深,好像名字叫做”svg burndown”.
顾名思义,他的这个demo是用svg做的,我觉得挺有意思,于是下定决心自己做一个,svg已经被他用过了,再用就没意思了。
剩下的也就只有html5的canvas可以考虑了,虽然自己的canvas功底不算很强,但还是决定大胆尝试一番。
燃尽图是现在团队敏捷开发非常重要的考量工具,对于团队的分工、进度把控、成员协作等方面起到非常重要的作用。
燃尽图主要分为以下几个部分:
1、坐标轴
主要分为x轴和y轴,其中x轴表示时间,y轴表示剩余任务量,y轴为0时表示任务全部完成。
drawCoordinate: function() { sContext.beginPath(); sContext.moveTo(xSpace, 0); sContext.lineTo(xSpace, config.height - ySpace); sContext.lineTo(config.width, config.height - ySpace); sContext.lineWidth = 3; sContext.strokeStyle = 'rgba(0,0,0,0.5)'; sContext.stroke(); sContext.closePath(); }, drawScaleX: function() { sContext.beginPath(); sContext.moveTo(xSpace, config.height); var len = timeList.length; sContext.textAlign = 'center'; for(var i = 0; i < len; i++) { var date = timeList[i]; var show = date[2] +'/'+ (parseInt(date[1])+1); var x = config.width/(len+1)*i + xSpace; if(i > 0) { sContext.moveTo(x, 0); sContext.lineTo(x, config.height - ySpace); maxX = [x, config.height - ySpace]; } scaleX[i] = x; sContext.fillText(show, x, config.height - 5); } sContext.lineWidth = 1; sContext.strokeStyle = '#eeeeee'; sContext.stroke(); sContext.closePath(); }, drawScaleY: function() { var num = 0; var max = config.taskMax; var step = config.taskStep; var len = max/step; var pLen = parseInt(max/step); len = len === pLen ? pLen+1 : pLen+2; sContext.beginPath(); sContext.moveTo(xSpace, config.height); sContext.textAlign = 'right'; sContext.textBaseline = 'middle'; for(var i = 0; i < len; i++) { var y = config.height - ySpace - config.height/len*i; if(i > 0) { if(i === len - 1) { y = ySpace; num = config.taskMax; } sContext.moveTo(config.width, y); sContext.lineTo(xSpace, y); maxY = [xSpace, y]; } sContext.fillText(num+'', xSpace, y); num += step; } sContext.strokeStyle = '#eeeeee'; sContext.stroke(); sContext.closePath(); },
2、参考线
参考线是指标准的项目燃尽线路图,当然,在具体项目中,几乎不可能完全按照参考线的路径一直往下走,一般都是在参考线上下徘徊才算正常。
drawRefLine: function() { sContext.beginPath(); sContext.moveTo(maxY[0], maxY[1]); sContext.lineTo(maxX[0], maxX[1]); sContext.lineWidth = 3; sContext.strokeStyle = 'rgba(255,255,0,0.5)'; sContext.stroke(); sContext.closePath(); },
3、燃尽线路
燃尽图最重要的便是燃尽线路,每当到了一个时间点,就应该更新燃尽图,具体的操作便是添加一个坐标,许多个坐标连成线变成了燃尽线路。当最后一个时间点的任务量剩余不为0时,表示任务没有完成,同志人须努力啊。
drawBurnLine: function(task) { task && !this.isSameDate(task) && taskList.push(task); taskList = taskList.sort(); lContext.clearRect(0, 0, config.width, config.height); lContext.beginPath(); lContext.moveTo(maxY[0], maxY[1]); for(var i = 0; i < taskList.length; i++) { var x = taskList[i][0]; var y = taskList[i][1]; for(var j = 0; j < scaleX.length; j++) { if(x.join('') === timeList[j].join('')) { var xx = scaleX[j]; var yy = y > 0 ? (1 - y/config.taskMax)*(config.height - ySpace) : config.height - ySpace; lContext.lineTo(xx, yy); lContext.arc(xx, yy, 3, 0, Math.PI*2, true); break; } } } lContext.lineWidth = 3; lContext.strokeStyle = 'rgba(0,0,255,0.5)'; lContext.stroke(); lContext.closePath(); },
以上便是canvas燃尽图的大致实现原理,肯定还有诸多瑕疵,希望看完后能给个评价,自当虚心接受。
demo演示效果地址:http://xiechengxiong.com/221.html
欢迎光临我的前端博客:http://xiechengxiong.com/- HTML5 canvas燃尽图
- html5 canvas
- html5-canvas
- HTML5 canvas
- html5 canvas
- HTML5 Canvas
- HTML5 Canvas
- html5 canvas
- HTML5 Canvas
- HTML5--Canvas
- HTML5 Canvas
- HTML5 canvas
- HTML5-canvas
- HTML5 Canvas
- html5 canvas
- html5-canvas
- html5---canvas
- html5 canvas
- C#概述与概念(一)
- jdom解析xml文档
- 兼容IE6\7\8浏览器的html5标签的几个方案
- outlook 如何 立即 应用 规则
- 【Java】 日期转换【Date--long--String】
- HTML5 canvas燃尽图
- printf参数汇总
- 卡尔曼滤波与粒子滤波(转载)
- 在TextView中自定义链接
- OneNote 2007简体中文官方单独安装版
- 杭电 1292 "下沙野骆驼"ACM夏令营
- Java如何调用系统打印机打印文件
- 学习select(函数)
- spring cache支持