用canvas画心电图的示例代码


Posted in HTML / CSS onSeptember 10, 2018

本文介绍了用canvas画心电图的示例代码,分享给大家,具体如下:

效果图:

用canvas画心电图的示例代码

思路:

​1.模拟点(如果你有真实的数据,那就是把数据幻化成canvas对应的坐标点)

​ 模拟点时注意的点就是高起部分需要对称以及为了好看要随机出现上上下下

2.画线

​ 画线需要注意有一个匀速移动的过程。

​ 比如 A点到B点,不是简单的A画到B,而是A点到A1,A2....最后到B(这一块按照比例移动比较难)

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{
             width: 100%;
             height: 100%;
             margin: 0;
         }
         canvas{
             background: #000;
             width: 100%;
            height: 100%;
         }
     </style>
 </head>
 <body>
 <div id="canvas">
     <canvas id="can"></canvas>
 </div>
 <script>
     var can = document.getElementById('can'),
         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();
     function 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.shadowOffsetY = 0;
         pan.shadowBlur = 20;
         pan.beginPath();
         pan.moveTo(x,y);
         drawXYS();
         index = setInterval(move,1);
     };

     function 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;
                     }
                     flag = true;
                 }
                 cDrawX = Math.random()*40+15;
             }else{
                 drawY = hei/2;
             }
             drawX += cDrawX;
             drawXY.push({
                 x : drawX,
                 y : drawY
             });
             drawXYS();
         }
     }

     function move(){
         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 = x;
                 reY = y;
                 i++;
                 cc();
                 return;
             }
         }else if(y < hei/2){
             if(reY <= y){
                 reX = x;
                 reY = y;
                 i++;
                 cc();
                 return;
             }
         }else{
             reX = x;
             reY = y;
             i++;
             cc();
             return;
         }

         reX += 1;
         if(y == hei/2){
             reY = hei/2;
         }else{
             var c = Math.abs((drawXY[i].x-drawXY[i-1].x)/(drawXY[i].y-drawXY[i-1].y));
             var _yt = (reX-drawXY[i-1].x)/c;

             if(drawXY[i].y < drawXY[i-1].y){
                 reY = drawXY[i-1].y - _yt;
             }else{
                 reY = drawXY[i-1].y + _yt;
             }
         }
         cc();
     }

    function cc(){
        if(i == drawXY.length){
             pan.closePath();
             clearInterval(index);
             index = 0;
             x = 0;
             y = hei/2;
             flag = true;
             i = 0;
         }else{
             pan.lineTo(reX, reY);
             pan.stroke();
         }
    }
 
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3对图片照片进行边缘模糊处理的实现
Aug 08 HTML / CSS
简单总结CSS3中视窗单位Viewport的常见用法
Feb 04 HTML / CSS
css3使用animation属性实现炫酷效果(推荐)
Feb 04 HTML / CSS
CSS3实现文字描边的2种方法(小结)
Feb 14 HTML / CSS
CSS实现进度条和订单进度条的示例
Nov 05 HTML / CSS
css3弹性盒子flex实现三栏布局的实现
Nov 12 HTML / CSS
HTML5 实战PHP之Web页面表单设计
Oct 09 HTML / CSS
html5配合css3实现带提示文字的输入框(摆脱js)
Mar 08 HTML / CSS
HTML5 Canvas——用路径描画线条实例介绍
Jun 09 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
Dec 30 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
Oct 16 HTML / CSS
canvas绘制图片drawImage使用方法
Sep 15 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
Sep 06 #HTML / CSS
canvas离屏技术与放大镜实现代码示例
Aug 31 #HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
Aug 29 #HTML / CSS
使用canvas对多图片拼合并导出图片的方法
Aug 28 #HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
Aug 28 #HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
Aug 27 #HTML / CSS
html5中audio支持音频格式的解决方法
Aug 24 #HTML / CSS
You might like
php 获取select下拉列表框的值
2010/05/08 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
重定向实现代码
2006/11/20 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
JS实现放烟花效果
2020/03/10 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python中is与==判断的区别
2017/03/28 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
销售员岗位职责范本
2014/02/03 职场文书
机关保密承诺书
2014/06/03 职场文书
国庆节慰问信
2015/02/15 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL