使用原生js+canvas制作的模拟心电图的html页面,因为和项目一起打包放到了github上,所以使用了vue.js的单页模式,实际上你不需要使用任何额外的框架和样式,也可以完成这个demo,现在让我们一起来拆解这个项目吧!
1:在页面上创建一个canvas画布,要让心电图的“线”在我们的页面上动起来,canvas是必不可少的。因为项目比较简单,到此为止页面上的DOM元素已经写完了,主要的工作量集中在js部分
1 2 3 | <p class = "heartBeat" >
<canvas id= "can" >Canvas画板</canvas>
</p>
|
登录后复制
2:定义几个变量并赋值,运行时会需要用到这些变量进行计算
1 2 3 4 5 6 7 8 | var can = document.getElementById('can'),
pan,
index = 0,
flag = true,
wid = document.body.clientWidth,
hei = document.body.clientHeight,
x = 0,
y = hei/2;
|
登录后复制
3:初始化画布,给画布设置各种属性
1 2 3 4 5 6 7 8 9 10 11 | function start(){
can.height = hei;
can.width = wid;
pan = can.getContext( "2d" );
pan.strokeStyle = "#08b95a" ;
pan.lineJoin = "round" ;
pan.lineWidth = 9;
pan.beginPath();
pan.moveTo(x,y);
index = setInterval(move,1);
};
|
登录后复制
可以看到,在这里我们还没有涉及到“画”的动作,仅仅只是初始化了画布尺寸,使画布充满屏幕,同时定义了画笔的颜色、粗细、落笔点等操作,然后使用setInterval方法让画笔不停地按照我们计算的路线运动,如果你对setInterval方法不是很熟悉,建议你看下 setInterVal用法 ,这里不再敷述。因为我们想要让心电图无限循环且自动执行,所以在这里将它封装为start()函数,这样当心电图运动到屏幕最右方时,我们重新执行这个start()函数,就可以实现让心电图无限循环了
4.让心电图动起来!可以说,前面的步骤都没有什么难度,真正的核心代码在于让我们的心电图动起来,并且是按照我们希望的路线前进,下面我们就让心电图真正活过来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | function move(){
x++;
if (x < 100){
} else {
if (x >= wid - 100){
} else {
var z = Math.random()*280;
if (y <= z){
flag = true
}
if ((hei - y) <= z){
flag = false
}
if (flag){
y+=5
} else {
y-=5
}
}
}
if (x == wid){
pan.closePath();
clearInterval(index);
index = 0;
x = 0;
y = hei/2;
flag = true;
start();
}
pan.lineTo(x,y);
pan.stroke();
}
|
登录后复制
5:注意事项,到这里实际上心电图已经可以运行起来了,但是要注意的是,设置你的body高度为100%,否则画布可能无法撑满整个页面
1 2 3 4 5 | html,body{
width: 100%;
height: 100%;
margin: 0;
}
|
登录后复制
项目完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | <!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{
width: 100%;
height: 100%;
margin: 0;
}
</style>
</head>
<body>
<p id= "canvas" >
<canvas id= "can" >Canvas画板</canvas>
</p>
<script src= "js/vue.min.js" ></script>
<script>
var can = document.getElementById('can'),
pan,
index = 0,
flag = true,
wid = document.body.clientWidth,
hei = document.body.clientHeight,
x = 0,
y = hei/2;
start();
function start(){
can.height = hei;
can.width = wid;
pan = can.getContext( "2d" );
pan.strokeStyle = "#08b95a" ;
pan.lineJoin = "round" ;
pan.lineWidth = 9;
pan.beginPath();
pan.moveTo(x,y);
index = setInterval(move,1);
};
function move(){
x++;
if (x < 100){
} else {
if (x >= wid - 100){
} else {
var z = Math.random()*280;
if (y <= z){
flag = true
}
if ((hei - y) <= z){
flag = false
}
if (flag){
y+=5
} else {
y-=5
}
}
}
if (x == wid){
pan.closePath();
clearInterval(index);
index = 0;
x = 0;
y = hei/2;
flag = true;
start();
}
pan.lineTo(x,y);
pan.stroke();
}
</script>
</body>
</html>
|
登录后复制
相关推荐:
Canvas实现炫丽的粒子运动效果
canvas多边形的画法示例
html2 canvas实现浏览器截图
以上是原生js和canvas模拟心电图代码分享的详细内容。更多信息请关注PHP中文网其他相关文章!