<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
background-color: #333;
}
div {
padding: 16px;
width: 400px;
height: 160px;
background-color: #fff;
border-radius: 6px;
margin: 20px;
position: relative;
}
canvas {
position: absolute;
left: 16px;
top: 16px;
}
</style>
</head>
<body>
<div>
<canvas id="c1" width="400" height="160"></canvas>
<canvas id="c2" width="400" height="160"></canvas>
</div>
</body>
<script>
let sd = [100, 180, 170, 60, 100, 100,100, 100, 100, 160, 80, 120, 100, 100, 100, 100, 100, 100, 100, 100]
/** 画线 */
let data = []
function drawLine(ctx, shadow) {
/** 开始x坐标、开始y坐标、结束x坐标、结束y坐标 */
let grd = ctx.createLinearGradient(0, 100, 400, 100)
grd.addColorStop(0, `rgba(14, 185, 160, ${shadow ? 0.1 : 1})`)
grd.addColorStop(1, `rgba(160, 209, 118, ${shadow ? 0.1 : 1})`)
// 将渐变赋值给线的样式
ctx.strokeStyle = grd
// 高大约170+
let pyX = shadow ? 6 : 0
ctx.beginPath()
let newData = data.map(item => {
return 160 - (item / 200) * 140
})
// console.log(newData)
// console.log('***********')
// ctx.moveTo(0, endPoint)
newData.forEach((item, index) => {
let x = index * 4
ctx.lineTo(x, item + pyX)
})
ctx.lineWidth = shadow ? 5 : 2
ctx.stroke()
}
function drwaBg(ctx) {
/*1.绘制网格*/
/*2.网格的大小*/
var lineNumber = 6
var canvasHeight = ctx.canvas.height - lineNumber
var canvasWidth = ctx.canvas.width
console.log(canvasWidth, canvasHeight)
for (var i = 0; i < 6; i++) {
let endPoint = i * 28 + 10.5
ctx.beginPath()
ctx.moveTo(0, endPoint)
ctx.lineTo(canvasWidth, endPoint)
ctx.strokeStyle = '#ddd'
ctx.lineWidth = 1
ctx.stroke()
}
}
let c1 = document.querySelector('#c1')
let ctx1 = c1.getContext('2d')
drwaBg(ctx1)
let c2 = document.querySelector('#c2')
let ctx2 = c2.getContext('2d')
let stop = 0
let index = 0
function loop() {
if(data.length>= 100) {
data.shift()
}
data.push(sd[index])
index++
if(index>20) {
index = 0
}
// console.log('-----------')
// console.log(data)
ctx2.clearRect(0, 0, 1000, 1000)
drawLine(ctx2)
drawLine(ctx2, true)
window.requestAnimationFrame(() => {
if(stop < 5000){
loop()
}
stop ++
})
}
loop()
</script>
</html>
【canvas】心电图绘制
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 根据心电图(ECG)数据分析(瞎猜)绘制样子差不多的心电图 项目中用到心电图分析,使用某仪器测量...
- 效果预览 如图所示,最新数据将从右往左展示出来,并且X轴没有明确的大小限制,适用于一些数据的实时查看获取,例如CP...
- 从接触android蓝牙开发到现在已两月有余,将自己一个个小小的知识点积攒起来,以便日后查阅。android蓝...
- 先上个效果图(画块饼),让你有耐心看完下面内容。 网上已经有不少人,把类似的效果做出来了。我就把自己做出这个效果的...