middleware.html 5.8 KB

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