trendChart.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. String.prototype.trim = function () {
  2. var str = this,
  3. str = str.replace(/^\s+/, '');
  4. for (var i = str.length - 1; i >= 0; i--) {
  5. if (/\S/.test(str.charAt(i))) {
  6. str = str.substring(0, i + 1);
  7. break;
  8. }
  9. }
  10. return str;
  11. }
  12. Array.prototype.Contain = function (item) {
  13. var array = this;
  14. for (var i = array.length - 1; i >= 0; i--) {
  15. if (array[i] == item)
  16. return true;
  17. }
  18. return false;
  19. }
  20. var trendInit = function () {
  21. if (typeof $("#chartData")[0] == "undefined")
  22. return;
  23. var c = trendChart("chartData", "chartLine");
  24. c.Init();
  25. $(".ctl-list").children(".ctl-item").children(":checkbox").click(function () {
  26. var $this = $(this);
  27. var $checked = $this.attr("checked") || false;
  28. var _name = $this.attr("name");
  29. $(".ctl-box").children(".ctl-item").children("[name='" + _name + "']").each(function () { $(this).attr("checked", $checked); });
  30. switch (_name) {
  31. case "ctl_foldLine":
  32. c.ShowLine($checked);
  33. break;
  34. case "ctl_miss":
  35. $("#trendBox").attr("class", $checked ? "item nomiss" : "item");
  36. break;
  37. case "ctl_sliceMiss":
  38. c.SliceMiss($checked);
  39. break;
  40. case "ctl_repeat":
  41. c.Repeat($checked);
  42. break;
  43. case "ctl_continuous":
  44. c.Continuous($checked);
  45. break
  46. case "ctl_near":
  47. c.Near($checked);
  48. break;
  49. case "ctl_jump":
  50. c.Jump($checked);
  51. break;
  52. }
  53. //Modified by zizi at 2016-6-2
  54. setTimeout(function() { $('.cancel').click(); }, 200);
  55. });
  56. var _pbox = $("tbody.presele-box");
  57. if (2 == _pbox.length) {
  58. _pbox.eq(1).children("tr").children("td").each(function () {
  59. var $this = $(this);
  60. var pl = $this.attr("pl") || "";
  61. var _s = (pl === "orange" || pl === "bgblue") ? "presele-square" : "presele-ball";
  62. if (0 < pl.length) {
  63. $this.click(function () {
  64. $this.attr("class", ($this.attr("class") == _s ? "presele-" + pl : _s));
  65. });
  66. }
  67. });
  68. _pbox.eq(0).children("tr").each(function (i) {
  69. var $this = $(this);
  70. $this.children("td").children("span").click(function () {
  71. //$this.hide(); _pbox.eq(1).children("tr").eq(i).hide();
  72. });
  73. $this.children("td").children("strong").click(function () {
  74. var t = _pbox.eq(0).children("tr");
  75. for (var i = 1; i < t.length; i++) {
  76. if ("none" == t.eq(i).css("display")) {
  77. t.eq(i).show(); break;
  78. }
  79. }
  80. var s = _pbox.eq(1).children("tr");
  81. for (var i = 1; i < s.length; i++) {
  82. if ("none" == s.eq(i).css("display")) {
  83. s.eq(i).show(); break;
  84. }
  85. }
  86. });
  87. });
  88. }
  89. $(".dataAnalysisBox").children(":radio").click(function () {
  90. var $this = $(this);
  91. var $checked = $this.attr("checked") || false;
  92. var _id = $this.attr("id");
  93. var c = "currentAnalysis" == _id;
  94. if ((c && $checked) || (!c && !$checked)) {
  95. $("#currentData").attr("style", "");
  96. $("#historyData").hide();
  97. } else {
  98. $("#currentData").hide();
  99. $("#historyData").attr("style", "");
  100. }
  101. });
  102. }
  103. var trendSearch = function () {
  104. $("input.searchs").click(function () {
  105. var _s = $("#startTerm").val(),
  106. _e = $("#endTerm").val();
  107. if ($("#startTerm").attr("type") != "Date") {
  108. if (7 != _s.length) {
  109. alert("查询开始期数错误,请重新输入!");
  110. return;
  111. }
  112. if (7 != _e.length) {
  113. alert("查询结束期数错误,请重新输入!");
  114. return;
  115. }
  116. window.location = window.location.href.split("?")[0] + "?startTerm=" + _s + "&endTerm=" + _e;
  117. } else {
  118. if (10 != _s.length)
  119. {
  120. alert("查询开始期数错误,请重新输入!");
  121. return;
  122. }
  123. window.location = window.location.href.split("?")[0] + "?searchTime=" + _s;
  124. }
  125. });
  126. /*modify by djp 2016-06-03 修正addclass、prop */
  127. var _search = window.location.search.toLowerCase();
  128. if (_search.indexOf("record") != -1) {
  129. $(".search-link").children("a").each(function () {
  130. var $this = $(this);
  131. $this.removeClass("select");
  132. if ($this.attr("href").toLowerCase() === _search) { $this.addClass("select"); }
  133. });
  134. }
  135. if (_search.indexOf("year") != -1) {
  136. var _i = _search.split("&")[0].split("=")[1] + "年", _b = false; ;
  137. $(".mSelectBox").children("option").each(function () {
  138. var $this = $(this);
  139. $this.prop("selected", false);
  140. if ($this.text() == _i) {
  141. $this.prop("selected", true);
  142. _b = true;
  143. }
  144. });
  145. if (!_b) {
  146. $(".mSelectBox").children("option").eq(0).text("selected",true);
  147. };
  148. }
  149. }
  150. var trendChart = function (t, d, s) {
  151. this.sortDirection = 0;
  152. var _d = $("#" + d);
  153. var _e = $("#" + t);
  154. var _s = s || 1.5;
  155. var a_p = new Array();
  156. var a_term = new Array();
  157. this.Init = function () {
  158. _d.html("");
  159. var row = _e.children("tr");
  160. var t = "", c = "", n = "", r = 0, k = 0, u = new Array(), l = new Array();
  161. for (var i = row.length - 1; i >= 0; i--) {
  162. var col = row.eq(i).children("td");
  163. a_term.push(col.eq(0).text());
  164. for (var j = col.length - 1; j >= 0; j--) {
  165. t = col.eq(j).attr("lgroup") || "";
  166. if (0 >= t.length) { continue; }
  167. n = col.eq(j)[0].className;
  168. if (n.indexOf("ball") > -1) { r = 8; }
  169. if (n.indexOf("triangle") > -1) { r = 4; }
  170. if (n.indexOf("round") > -1) { r = 6; }
  171. c = col.eq(j).attr("lcolor");
  172. if (4 > c.length) { c = n.indexOf("red") == -1 ? "#387ec0" : "#b94c59"; }
  173. l[k] = f_a(col.eq(j), t, r);
  174. if (u && u[k] && u[k].g == l[k].g) { f_paint(f_b(u[k], l[k], c)); }
  175. k++;
  176. }
  177. k = 0; u = l; l = new Array();
  178. }
  179. a_term.sort();
  180. };
  181. this.Sort = function () {
  182. var row = new Array();
  183. var _tr = _e.children("tr");
  184. for (var i = _tr.length - 1; i >= 0; i--) {
  185. row.push(_tr.eq(i)[0].outerHTML);
  186. }
  187. _d.html("");
  188. _e.html(row.join(""));
  189. f_repaint();
  190. };
  191. this.ShowLine = function (show) {
  192. if (!show) { _d.hide(); } else { _d.show(); }
  193. };
  194. this.SliceMiss = function (show) {
  195. var row = _e.children("tr");
  196. var v = 0, name = "", cell = new Array(), a_sm = new Array();
  197. if (0 == this.sortDirection) {
  198. for (var i = row.length - 1; i >= 0; i--) {
  199. var col = row.eq(i).children("td");
  200. for (var j = col.length - 1; j >= 0; j--) {
  201. name = col.eq(j).attr("lgroup") || "";
  202. if (0 < name.length) {
  203. if (!cell.Contain(j)) { cell.push(j); }
  204. continue;
  205. }
  206. name = col.eq(j).attr("class") || "";
  207. if (name.indexOf("miss") == -1) {
  208. if (!cell.Contain(j)) { cell.push(j); }
  209. continue;
  210. }
  211. if (!cell.Contain(j)) {
  212. a_sm.push({ obj: col.eq(j), cell: j, row: v });
  213. }
  214. }
  215. v++;
  216. }
  217. }
  218. else {
  219. for (var i = 0; i < row.length; i++) {
  220. var col = row.eq(i).children("td");
  221. for (var j = col.length - 1; j >= 0; j--) {
  222. name = col.eq(j).attr("lgroup") || "";
  223. if (0 < name.length) {
  224. if (!cell.Contain(j)) { cell.push(j); }
  225. continue;
  226. }
  227. name = col.eq(j).attr("class") || "";
  228. if (name.indexOf("miss") == -1) {
  229. if (!cell.Contain(j)) { cell.push(j); }
  230. continue;
  231. }
  232. if (!cell.Contain(j)) {
  233. a_sm.push({ obj: col.eq(j), cell: j, row: v });
  234. }
  235. }
  236. v++;
  237. }
  238. }
  239. var cssCell = new Array();
  240. for (var i = a_sm.length - 1; i >= 0; i--) {
  241. if (a_sm[i].row > 11) {
  242. cssCell[a_sm[i].cell] = "sliceMiss-m";
  243. continue;
  244. }
  245. if (a_sm[i].row > 5) {
  246. cssCell[a_sm[i].cell] = cssCell[a_sm[i].cell] || "sliceMiss-11";
  247. continue;
  248. }
  249. cssCell[a_sm[i].cell] = cssCell[a_sm[i].cell] || "sliceMiss-5";
  250. }
  251. var css = "";
  252. for (var i = a_sm.length - 1; i >= 0; i--) {
  253. css = cssCell[a_sm[i].cell] || "sliceMiss-5";
  254. if (show)
  255. a_sm[i].obj.attr("class", a_sm[i].obj.attr("class") + " " + css);
  256. else
  257. a_sm[i].obj.attr("class", a_sm[i].obj.attr("class").replace(css, ""));
  258. }
  259. };
  260. this.Repeat = function (show) {
  261. var row = _e.children("tr");
  262. if (0 == this.sortDirection) {
  263. for (var i = 1; i < row.length; i++) {
  264. var col = row.eq(i).children("td");
  265. var cot = row.eq(i - 1).children("td");
  266. for (var j = col.length - 1; j >= 0; j--) {
  267. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  268. continue;
  269. if (0 >= (col.eq(j).attr("lgroup") || "").length)
  270. continue;
  271. if (0 >= (cot.eq(j).attr("lgroup") || "").length)
  272. continue;
  273. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-green" : col.eq(j)[0].className.replace("ball-green", "");
  274. }
  275. }
  276. }
  277. else {
  278. for (var i = row.length - 2; i >= 0; i--) {
  279. var col = row.eq(i).children("td");
  280. var cot = row.eq(i + 1).children("td");
  281. for (var j = col.length - 1; j >= 0; j--) {
  282. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  283. continue;
  284. if (0 >= (col.eq(j).attr("lgroup") || "").length)
  285. continue;
  286. if (0 >= (cot.eq(j).attr("lgroup") || "").length)
  287. continue;
  288. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-green" : col.eq(j)[0].className.replace("ball-green", "");
  289. }
  290. }
  291. }
  292. };
  293. this.Near = function (show) {
  294. var row = _e.children("tr");
  295. var g = "", gtl = "", gtr = "";
  296. if (0 == this.sortDirection) {
  297. for (var i = 1; i < row.length; i++) {
  298. var col = row.eq(i).children("td");
  299. var cot = row.eq(i - 1).children("td");
  300. for (var j = col.length - 1; j >= 0; j--) {
  301. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  302. continue;
  303. g = col.eq(j).attr("lgroup") || "";
  304. if (0 >= g.length)
  305. continue;
  306. gtl = cot.eq(j - 1).attr("lgroup") || "";
  307. gtr = cot.eq(j + 1).attr("lgroup") || "";
  308. if (g == gtl || g == gtr) {
  309. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-orange" : col.eq(j)[0].className.replace("ball-orange", "");
  310. }
  311. }
  312. }
  313. }
  314. else {
  315. for (var i = row.length - 2; i >= 0; i--) {
  316. var col = row.eq(i).children("td");
  317. var cot = row.eq(i + 1).children("td");
  318. for (var j = col.length - 1; j >= 0; j--) {
  319. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  320. continue;
  321. g = col.eq(j).attr("lgroup") || "";
  322. if (0 >= g.length)
  323. continue;
  324. gtl = cot.eq(j - 1).attr("lgroup") || "";
  325. gtr = cot.eq(j + 1).attr("lgroup") || "";
  326. if (g == gtl || g == gtr) {
  327. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-orange" : col.eq(j)[0].className.replace("ball-orange", "");
  328. }
  329. }
  330. }
  331. }
  332. };
  333. this.Jump = function (show) {
  334. var row = _e.children("tr");
  335. if (0 == this.sortDirection) {
  336. for (var i = 2; i < row.length; i++) {
  337. var col = row.eq(i).children("td");
  338. var cot = row.eq(i - 2).children("td");
  339. for (var j = col.length - 1; j >= 0; j--) {
  340. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  341. continue;
  342. if (0 >= (col.eq(j).attr("lgroup") || "").length)
  343. continue;
  344. if (0 >= (cot.eq(j).attr("lgroup") || "").length)
  345. continue;
  346. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-purple" : col.eq(j)[0].className.replace("ball-purple", "");
  347. }
  348. }
  349. }
  350. else {
  351. for (var i = row.length - 3; i >= 0; i--) {
  352. var col = row.eq(i).children("td");
  353. var cot = row.eq(i + 2).children("td");
  354. for (var j = col.length - 1; j >= 0; j--) {
  355. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  356. continue;
  357. if (0 >= (col.eq(j).attr("lgroup") || "").length)
  358. continue;
  359. if (0 >= (cot.eq(j).attr("lgroup") || "").length)
  360. continue;
  361. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-purple" : col.eq(j)[0].className.replace("ball-purple", "");
  362. }
  363. }
  364. }
  365. };
  366. this.Continuous = function (show) {
  367. var row = _e.children("tr");
  368. var g = "", gr = "";
  369. for (var i = row.length - 1; i >= 0; i--) {
  370. var col = row.eq(i).children("td");
  371. for (var j = 1; j < col.length; j++) {
  372. if ((col.eq(j).attr("class") || "").indexOf("ball") == -1)
  373. continue;
  374. g = col.eq(j).attr("lgroup") || "";
  375. if (0 >= g.length)
  376. continue;
  377. gr = col.eq(j - 1).attr("lgroup") || "";
  378. if (g == gr) {
  379. col.eq(j)[0].className = show ? col.eq(j)[0].className + " ball-lightgreen" : col.eq(j)[0].className.replace("ball-lightgreen", "");
  380. }
  381. }
  382. }
  383. };
  384. var f_paint = function (p) {
  385. if (!p || p == "undefined")
  386. return;
  387. _d.append(chartLine(p, _s));
  388. };
  389. var f_repaint = function () {
  390. var h = _e.height(), t = _e.position().top;
  391. for (var i = a_p.length - 1; i >= 0; i--) {
  392. a_p[i].s.t = h + 2 * t - a_p[i].s.t;
  393. a_p[i].e.t = h + 2 * t - a_p[i].e.t;
  394. _d.append(f_paint(a_p[i]));
  395. }
  396. };
  397. var f_b = function (x, y, z) {
  398. var x1 = x.l - y.l, x2 = x.t - y.t;
  399. var s = Math.round(Math.sqrt(Math.pow(x1, 2) + Math.pow(x2, 2)));
  400. var i = x.r, t, p;
  401. if (1 > i) {
  402. if (x2 / x1 >= x.rh / x.rw) { i = x.rh; }
  403. else { i = x.rw; }
  404. }
  405. t = Math.round((x1 * i) / s);
  406. p = Math.round((x2 * i) / s);
  407. var a = { s: { l: x.l - t, t: x.t - p }, e: { l: y.l + t, t: y.t + p }, c: z };
  408. a_p.push(a);
  409. return a;
  410. };
  411. var f_a = function (o, p, r) {
  412. var _o = o.position(), _w = o.width() / 2, _h = o.height() / 2;
  413. return {
  414. l: _o.left + _w,
  415. t: _o.top + _h,
  416. g: p,
  417. rw: _w - 1,
  418. rh: _h - 1,
  419. r: r
  420. };
  421. };
  422. return this;
  423. }
  424. var chartLine = function (r, s) {
  425. var k = document.createElement("canvas");
  426. var u = Math.min(r.s.t, r.e.t), v = Math.min(r.s.l, r.e.l);
  427. var w = Math.abs(r.s.l - r.e.l);
  428. k.width = w < 2 ? 2 : w;
  429. k.height = Math.abs(r.s.t - r.e.t);
  430. k.style.top = u + "px";
  431. k.style.left = v + "px";
  432. k.style.position = "absolute";
  433. k.style.visibility = "visible";
  434. var d = k.getContext("2d");
  435. d.save();
  436. d.strokeStyle = r.c || "#000";
  437. d.lineWidth = s || 1.5;
  438. d.beginPath();
  439. d.moveTo((r.s.l - v) <= 2 ? 1 : (r.s.l - v), r.s.t - u);
  440. d.lineTo((r.e.l - v) <= 2 ? 1 : (r.e.l - v), r.e.t - u);
  441. d.closePath();
  442. d.stroke();
  443. d.restore();
  444. return k;
  445. }