В этой статье представлен пример кода для использования холста для рисования электрокардиограммы, и мы делимся им со всеми подробностями:
Рендеринг:
Идея:
1. Моделировать точки (если у вас есть реальные данные, то преобразуйте их в точки координат, соответствующие холсту)
При моделировании точек важно отметить, что выступающие части должны быть симметричными и должны появляться случайным образом вверх и вниз, чтобы хорошо выглядеть.
2. Рисуем линии
При рисовании линий нужно обращать внимание на процесс движения с постоянной скоростью.
Например, из точки А в точку Б, не просто из А в Б, а из точки А в А1, А2... и наконец в Б (пропорционально переместить эту область сложнее)
3. Некоторые эффекты рисования линий, такие как добавление теней (вы можете свободно использовать это здесь), специальный код
<!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <title>Электрокардиограмма</title> <meta name=viewport content=width=device-width, Initial-scale=1, user -scalable=no> <style> html,body{ ширина: 100%; высота: 100%; поле: 0; } холст {ширина: #000; 100%; высота: 100%; } </style> </head> <body> <div id=canvas> <canvas id=can></canvas> </div> <script> var can = document.getElementById( 'может'), pan, index = 0, flag = true, wid = document.body.clientWidth, hei = document.body.clientHeight, x = 0, y = hei/2, drawX = 0, drawY = hei/2, drawXY = [], cDrawX = 0, i = 0, reX = 0, reY = 0; функция start() { can.height = hei; can.width = wid; pan = can.getContext(2d); pan.strokeStyle = white; pan.lineJoin = round; pan.lineWidth = 6; pan.shadowColor = #228DFF; pan.shadowOffsetX = 0; pan.shadowBlur = 20; pan.moveTo(x,y); index = setInterval(move, 1); функция drawXYS(){ if(drawX > wid){ }else{ if(drawY ==); hei/2) { if (flag) { flag = false; } else { var _y = Math.ceil(Math.random() * 10); _y = _y/2; if (Number.isInteger(_y)) { drawY += Math.random()*180+30; }else{ drawY -= Math.random()*180+30 } флаг = true } cDrawX = Math.random()*40+15; }else{ drawY = hei/2; } drawX += drawXY.push({ x : drawX, y : drawXYS(); (){ var x = drawXY[i].x, y = drawXY[i].y if(reX >= x - 1){ reX = x; reY = y; i++; cc(); return; } if(y > hei/2) { if(reY >= y) { reX = y; cc(); } } else if (y < hei/2) { if (reY <= y) { reX = x; reY = y; i++; return; reX = x; reY = y; i++; cc(); return; } reX += 1; if (y == hei/2; }else { var c = Math.abs((drawXY) [i].x-drawXY[i-1].x)/(drawXY[i].y-drawXY[i-1].y)); (reX-drawXY[i-1].x)/c; if(drawXY[i].y <drawXY[i-1].y){ reY = drawXY[i-1].y - _yt; reY = drawXY[i-1].y + _yt; } } cc() { if(i == drawXY.length){; pan.closePath(); ClearInterval(index); индекс = 0; y = hei/2; флаг = true; я = 0; }else { pan.lineTo(reX, reY()); } } </script></body></html>Выше приведено все содержание этой статьи. Я надеюсь, что она будет полезна для изучения всеми. Я также надеюсь, что все поддержат сеть VeVb Wulin.