Maison  >  Article  >  interface Web  >  Partage de code d'électrocardiogramme simulé en js natif et en toile

Partage de code d'électrocardiogramme simulé en js natif et en toile

小云云
小云云original
2018-02-05 13:33:041998parcourir

La page html qui simule l'électrocardiogramme est réalisée en utilisant js+canvas natif. Parce qu'elle est packagée et mise sur github avec le projet, elle utilise le mode page unique de vue.js. pour utiliser des frameworks et des styles supplémentaires. Vous pouvez également compléter cette démo, démontons maintenant ce projet ensemble !

1 : Créer un canevas sur la page Pour faire bouger la "ligne" de l'électrocardiogramme sur notre page, le canevas est indispensable. Le projet étant relativement simple, les éléments DOM de la page ont été écrits jusqu'à présent. La charge de travail principale est concentrée dans la partie js


<p class="heartBeat">
   <canvas id="can">Canvas画板</canvas>
 </p>

2 : Définir plusieurs. variables et affectation, ces variables seront nécessaires au calcul au moment de l'exécution


var can = document.getElementById(&#39;can&#39;),//画布对象
    pan,//获取2D图像API接口
    index = 0,//用来接收setinerval的值
    flag = true,//用来控制心电图折线的运行方向
    wid = document.body.clientWidth,//获取浏览器宽度
    hei = document.body.clientHeight,//获取浏览器高度
    x = 0,//心电图的“点”在画布上的x轴坐标,从0开始
    y = hei/2;//心电图的“点”在画布上的y轴坐标,从页面y轴居中位置开始

3 : Initialiser le canevas et définir diverses propriétés pour le canevas


function start(){
    can.height = hei;//设置画布高度
    can.width = wid;//设置画布宽度
    pan = can.getContext("2d");//获取2D图像API接口
    pan.strokeStyle = "#08b95a";//设置画笔颜色
    pan.lineJoin = "round";//设置画笔轨迹基于圆点拼接
    pan.lineWidth = 9;//设置画笔粗细
    pan.beginPath();//开始一条画笔的路径
    pan.moveTo(x,y);//定位我们的“落笔点”
    index = setInterval(move,1);//让我们的画笔动起来
  };

Comme vous pouvez le constater, nous n'avons pas encore abordé ici l'action "peinture". Nous avons juste initialisé la taille du canevas pour que le canevas remplisse l'écran, et en même temps défini. la couleur, l'épaisseur, la pointe du stylo, etc. de l'opération du pinceau, puis utilisez la méthode setInterval pour maintenir le pinceau en mouvement le long de l'itinéraire que nous avons calculé. Si vous n'êtes pas très familier avec la méthode setInterval, il est recommandé de suivre. un aperçu de l'utilisation de setInterVal, qui ne sera pas décrite ici. Parce que nous voulons que l'ECG boucle à l'infini et s'exécute automatiquement, nous l'encapsulons ici comme fonction start(), de sorte que lorsque l'ECG se déplace vers l'extrême droite de l'écran, nous réexécutons la fonction start() pour que l'ECG infini. C'est une boucle

4. Laissez l'électrocardiogramme bouger ! On peut dire que les étapes précédentes ne sont pas difficiles. Le véritable code de base est de faire bouger notre électrocardiogramme et de suivre le chemin que nous voulons. Maintenant, nous allons vraiment donner vie à l'électrocardiogramme


function move(){
    x++;//x轴是始终运动的,所以x一直自增
    if(x < 100){
      //前100px,我们不希望做垂直运动,让点只沿垂直方向运动即可,所以不做任何操作
    }else{
      if(x >= wid - 100){
      //最后的100px,同样希望心电图只做水平运动,不会上下波动,所以不做任何操作
      }else{
        //为了让心电图看起来更加逼真,我们希望心电图在运动时每次的波峰和波谷都是随机的,这样更类似于人类的心跳,所以我们给它一个随机值z
        var z = Math.random()*280;

        if(y <= z){
          //画布的坐标是从左上角开始计算的,也就是最左上角的点的坐标是(0,0),y是当前画笔所在坐标的y轴,假如y小于z,就代表y已经到达波峰位置,准备开始向波谷运动
          flag = true
        }
        if((hei - y) <= z){
          //假如当前画笔在y轴的坐标y距离浏览器底部hei的差值已经小于随机值z,代表当前的画笔已经运行到波谷位置,准备转向波峰位置运动
          flag = false
        }
        if(flag){
          //假如flag为true,代表画笔仍然向波谷位置前进,需要花点功夫理解的是,因为画布左上角的点的坐标是(0,0),所以y的值越大,画笔在y轴的位置越靠近浏览器底部,所以向波谷运动时,y的值是不断增加的,同时为了让波峰波谷更陡峭,我这里设置y += 5,
          y+=5
        }else{
          //假如flag为false,表示向波峰运动,y的值是不断减小的
          y-=5
        }
      }
    }
    if(x == wid){
      //当画笔运动到浏览器右侧边缘,停止绘图
      pan.closePath();
      //清除循环
      clearInterval(index);
      //将index置零,准备下一次循环
      index = 0;
      //重新定位画笔到屏幕左侧上下居中的位置
      x = 0;
      y = hei/2;
      flag = true;
      //重新进行下一次心电图的绘制
      start();
    }
    //lineTo和stroke函数负责描绘运动轨迹
    pan.lineTo(x,y);
    pan.stroke();
  }
5 : Remarque : À ce stade, l'électrocardiogramme est réellement prêt à fonctionner, mais il convient de noter que vous réglez la taille de votre corps à 100 %, sinon la toile risque de ne pas pouvoir remplir toute la page.


html,body{
   width: 100%;
   height: 100%;
   margin: 0;
  }
Code complet du projet :


<!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(&#39;can&#39;),
    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");//获取2D图像API接口
    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>
Recommandations associées :


Canvas réalise des effets de mouvement de particules éblouissants

Exemple de dessin de polygones sur toile

Le canevas HTML2 réalise des captures d'écran du navigateur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn