middleware.html 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title>测试界面</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <style type="text/css">
  8. </style>
  9. <script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
  10. <script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/locale/zh-cn.js"></script>
  11. <script type="text/javascript">
  12. // 方块的宽度、高度
  13. const rectHeight = 15;
  14. const rectWidth = 15;
  15. // 起始点的上坐标和左坐标
  16. const startTop = 100;
  17. const startLeft = 100;
  18. // 每行最多显示的方块数量
  19. const lineCount = 600;
  20. let startTimeSec = null;
  21. let endTimeSec = null;
  22. /**
  23. * 初始化界面
  24. */
  25. function init(startTime, endTime) {
  26. // 开始时间、结束时间的秒数
  27. startTimeSec = Math.ceil(moment(startTime).valueOf() / 1000);
  28. endTimeSec = Math.ceil(moment(endTime).valueOf() / 1000);
  29. // 结束时间-开始时间的间隔秒数
  30. let interval = endTimeSec - startTimeSec;
  31. var myCanvas = document.getElementById("myCanvas");
  32. myCanvas.width = lineCount * rectWidth + startLeft * 2;
  33. myCanvas.height = startTop * 2 + (Math.ceil(interval / lineCount) * (rectHeight + 2) * 2);
  34. var ctx = myCanvas.getContext("2d");
  35. ctx.fillStyle="#FF0000";
  36. for (let index = 0; index <= interval; index ++) {
  37. let lineIndex = Math.floor(index / lineCount);
  38. let columnIndex = index % lineCount;
  39. let rectTop = startTop + lineIndex * (rectHeight + 2) * 2;
  40. let rectLeft = startLeft + (rectWidth * columnIndex);
  41. ctx.rect(rectLeft, rectTop, rectWidth, rectHeight);
  42. ctx.rect(rectLeft, rectTop + rectHeight - 1, rectWidth, rectHeight);
  43. if(columnIndex === 0){
  44. let currentSec = (startTimeSec + index) * 1000;
  45. let text = moment(currentSec).format('YYYY-MM-DD HH:mm:ss');
  46. ctx.fillText(text, 0, rectTop + 10);
  47. }
  48. }
  49. ctx.stroke();
  50. }
  51. /**
  52. * 绘制事件
  53. */
  54. function drawEvent(dataArray) {
  55. var myCanvas = document.getElementById("myCanvas");
  56. var ctx = myCanvas.getContext("2d");
  57. for(let index = 0; index < dataArray.length; index ++){
  58. let data = dataArray[index];
  59. let sec = Math.ceil(moment(data).valueOf() / 1000);
  60. let interval = sec - startTimeSec;
  61. if(interval < 0){
  62. continue;
  63. }
  64. let lineIndex = Math.floor(interval / lineCount);
  65. let columnIndex = interval % lineCount;
  66. let rectTop = startTop + lineIndex * (rectHeight + 2) * 2;
  67. let rectLeft = startLeft + (rectWidth * columnIndex);
  68. ctx.fillRect(rectLeft, rectTop, rectWidth, rectHeight);
  69. }
  70. ctx.stroke();
  71. }
  72. /**
  73. * 绘制过滤事件
  74. */
  75. function drawEventFilter(filterArray){
  76. var myCanvas = document.getElementById("myCanvas");
  77. var ctx = myCanvas.getContext("2d");
  78. for(let index = 0; index < filterArray.length; index ++){
  79. let data = filterArray[index];
  80. let startSec = Math.ceil(moment(data.start).valueOf() / 1000);
  81. let endSec = Math.ceil(moment(data.end).valueOf() / 1000);
  82. let intervalStart = startSec - startTimeSec;
  83. intervalStart = (intervalStart <= 0) ? 0 : intervalStart;
  84. let intervalEnd = endSec - startTimeSec;
  85. intervalEnd = (intervalEnd <= 0) ? 0 : intervalEnd;
  86. for (let index = intervalStart; index <= intervalEnd; index ++) {
  87. let lineIndex = Math.floor(index / lineCount);
  88. let columnIndex = index % lineCount;
  89. let rectTop = startTop + lineIndex * (rectHeight + 2) * 2;
  90. let rectLeft = startLeft + (rectWidth * columnIndex);
  91. ctx.fillRect(rectLeft, rectTop + rectHeight - 1, rectWidth, rectHeight);
  92. }
  93. }
  94. ctx.stroke();
  95. }
  96. </script>
  97. </head>
  98. <body>
  99. <canvas id="myCanvas" width="20000" height="500" style="border:1px solid #000000;">
  100. </canvas>
  101. </body>
  102. <script>
  103. // 第一步,给定事件区间
  104. init('2021-09-01 00:00:00', '2021-09-02 00:00:00');
  105. // 给出Event数据,并进行绘制
  106. let dataArray = [];
  107. for(let i = 0; i < 100; i ++){
  108. dataArray.push('2021-09-01 00:00:00');
  109. dataArray.push('2021-09-01 00:00:01');
  110. dataArray.push('2021-09-01 00:00:02');
  111. dataArray.push('2021-09-01 00:00:03');
  112. dataArray.push('2021-09-01 00:00:04');
  113. dataArray.push('2021-09-01 00:00:06');
  114. dataArray.push('2021-09-01 00:01:00');
  115. dataArray.push('2021-09-01 00:01:01');
  116. dataArray.push('2021-09-01 00:01:02');
  117. dataArray.push('2021-09-01 09:59:59');
  118. dataArray.push('2021-09-01 10:00:00');
  119. dataArray.push('2021-09-01 10:00:01');
  120. dataArray.push('2021-09-01 10:00:02');
  121. dataArray.push('2021-09-01 10:00:03');
  122. dataArray.push('2021-09-02 00:00:00');
  123. }
  124. drawEvent(dataArray);
  125. // 给出EventFilter数据,并进行绘制
  126. let filterArray = [];
  127. filterArray.push({
  128. start: '2021-09-01 00:00:00',
  129. end: '2021-09-01 00:00:05',
  130. });
  131. filterArray.push({
  132. start: '2021-09-01 00:10:00',
  133. end: '2021-09-01 00:10:15',
  134. });
  135. filterArray.push({
  136. start: '2021-09-01 00:20:00',
  137. end: '2021-09-01 00:20:35',
  138. });
  139. drawEventFilter(filterArray);
  140. </script>
  141. </html>