Как показать две диаграммы на одной HTML-странице - PullRequest
0 голосов
/ 06 мая 2019

Я работаю над проектом, в котором я должен показать два вида графиков:

  • Диаграмма в реальном времени, и я использую libie.js для этого.
  • нормальный график с возможностью увеличения, и я использую холст lib для этого.

как показано в коде ниже, файл smoothie.js использует для тега body "onload":

  <!DOCTYPE html>
  <meta charset="utf-8">
  <html>
        <head>
              <title>Pression en temps réel</title>
              <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

               <script type="text/javascript" src="smoothie.js"></script>
               <script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>

               <script type="text/javascript">

               window.bufferX = [];

               setInterval(function () {

            if( typeof lastid == 'undefined' ) {
                $.get( "../be.php/lastid_1", function( dataA ) {
                 lastid = dataA[0].id_x+1;  
                })
            }
            else {
                $.get( "../be.php/1&"+lastid, function( dataB ) {
                     var i =0;
                     var j=0;

                     if( typeof counter == 'undefined' ) {
                            counter = 0;
                        }
                    if( typeof pck_prev == 'undefined' ) {
                                pck_prev = -1;
                            }

                    lastid = dataB[0].last_id;

                     for(i=0;i<dataB.length;i++) {

                        for(j=0;j<dataB[i].data.length;j++) {
                            if(dataB[i].data[j] !== "" && dataB[i].data[j] !== 0 && typeof  dataB[i].data[j] !== 'undefined' && pck_prev !== dataB[i].pck) {
                                window.bufferX.push(dataB[i].data[j]);
                            }
                        }
                        pck_prev = dataB[i].pck;
                     }
                     if(typeof window.bufferX[counter] == 'undefined') {
                       data_p.append(new Date().getTime(), window.bufferX[counter-1]);
                     }
                })
            } 
        },3000);



          var data_p = new TimeSeries();
          setInterval(function() {

           if(window.bufferX.length>50 && counter <window.bufferX.length)
                                 {

                                     if( typeof counter == 'undefined' ) {
                                        counter = 0;
                                    }

                                    else {
                                            data_p.append(new Date().getTime(), window.bufferX[counter]);
                                            counter++;
                                    } 
                                   }
          }, 250);       

  function createTimeline() {
    var chart = new SmoothieChart({responsive: true});
    chart.addTimeSeries(data_p, { strokeStyle: 'rgba(0, 255, 0, 1)', fillStyle: 'rgba(0, 255, 0, 0.2)', lineWidth: 4 });
    chart.streamTo(document.getElementById("chart"), 250);
  }

</script>
<script type="text/javascript">
      window.onload = function () {

        var chart = new CanvasJS.Chart("chartContainer",
        {
          zoomEnabled: true, 
          title:{
            text: "Try Zooming And Panning" 
          },
          axisY:{
            includeZero: false
          },
          data: data,  // random generator below

       });

        chart.render();
      }

        var limit = 1000;    //increase number of dataPoints by increasing this
        var y = 0;
        var data = []; var dataSeries = { type: "line" };
        var dataPoints = [];
        for (var i = 0; i < limit; i += 1) {
            y += (Math.random() * 10 - 5);
             dataPoints.push({
              x: i - limit / 2,
              y: y                
               });
            }
         dataSeries.dataPoints = dataPoints;
         data.push(dataSeries);               

       </script>
       </head>
  <body onload="createTimeline()">

           <canvas id="chart" style="width:100%; height:700px;"></canvas>
           <div id="chartContainer" style="height: 700px; width: 100%;"> 
                   </div>
   </body>
  </html>

Проблема в том, что если я удалю onload из тега body, я получу только диаграмму холста, а если я позволю, я получу только диаграмму в реальном времени.

Я бы хотел, чтобы на моей странице были показаны оба графика.

Спасибо за чтение.

1 Ответ

0 голосов
/ 06 мая 2019

window.onload и <body onload="yourfunction();"> - это разные способы использования одного и того же события, и вы используете оба, что вызывает проблему.Самый простой способ решить эту проблему - записать реализацию в одном событии либо в window.onload, либо в onload тега body.Найдите обновленную скрипку здесь .

Вы можете найти оба графика видимыми одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...