1.刚接到不久的工作任务,其中包含一个解析json数组,然后让解析后的数据显示在用zrender画出来的矩形上。效果如下所示(注:没有实际意义)
2.至于zrender等空闲了一定写上使用心得,东西很强大。
3.中间有一项是算计相邻的两个时间的时间差(所有这些时间都是在一个数组里),如图所示,算计相邻两个矩形上时间的差值。延伸一下可以是算一个数组里相邻两个数字的差值。
贴上我的代码 : for (var m = 0; m < dataObj.length - 1; m++) {
for (var j = m + 1; j < dataObj.length; j++) {
var time = GetDateDiff(dataObj[m].datetime, dataObj[j].datetime, "minute");
addShapeText(timexx, timeyy, time + "分钟", 'normal 10px verdana');
timexx += 180;
break;
}
}
写了一早上发现一直出错,到后来才知道是for循环是先执行外层循环,再执行内存循环,内层循环,一直直到内层for循环不满足条件才执行外层循环。问题就来了我希望的不是这样而是内外层for循环交替执行。【灵光一现:在内层for循环最后加break;】果断解决问题,哈哈。
4.中间有个addShapeText(timexx, timeyy, time + "分钟", 'normal 10px verdana'); 其实addShapeText这个方法是网上当来的,主要用来计算js中两个时间差值,具体地址记不清了,贴上代码记录下,以备以后使用: /*
* 获得时间差,时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时:分钟:秒
* 其中,年月日为全格式,例如 : 2010-10-12 01:00:00
* 返回精度为:秒,分,小时,天
*/
function GetDateDiff(startTime, endTime, diffType) {
//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
startTime = startTime.replace(/\-/g, "/");
endTime = endTime.replace(/\-/g, "/");
//将计算间隔类性字符转换为小写
diffType = diffType.toLowerCase();
var sTime = new Date(startTime); //开始时间
var eTime = new Date(endTime); //结束时间
//作为除数的数字
var divNum = 1;
switch (diffType) {
case "second":
divNum = 1000;
break;
case "minute":
divNum = 1000 * 60;
break;
case "hour":
divNum = 1000 * 3600;
break;
case "day":
divNum = 1000 * 3600 * 24;
break;
default:
break;
}
return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum));
}
5.解析json数组,示例代码如下:
$(function () {
//json数组
var title = ["aa",
"bb", "cc",
"dd", "ee",
"ff"]
DrawText(title);
})
function DrawText(data) {
var dataObj = eval(data);
for (var i = 0; i < dataObj.length; i++) {
//循环输出数组中每个值。
alert(dataObj[i]);
}
}