【问题标题】:CanvasJS Carousel not working on Bootstrap 4CanvasJS Carousel 不适用于 Bootstrap 4
【发布时间】:2018-09-23 20:23:27
【问题描述】:

我想绘制图表并在其上应用轮播。为此,我正在使用 CanvasJS。但我没有得到任何输出。我看不到任何图表。我正在使用引导程序 4.1.3。

在此之前我尝试使用 Google Charts,但我不知道如何在它们上应用轮播。我想要多个带有轮播的图表。我找不到与在 Google Charts 上应用轮播相关的任何内容,所以我切换到 CanvasJS,但没有任何效果。

请帮助我使用 CanvasJS 或 Google Charts。

下面是我的 CanvasJS 代码:

CSS:

.carousel-control {
 position: absolute;
top: 150px;
left: 15px;
width: 40px;
height: 40px;
//margin-top: -20px;
font-size: 60px;
font-weight: 100;
line-height: 30px;
background-image: none !important;
filter: none !important;
text-align: center;
-webkit-border-radius: 23px;
 -moz-border-radius: 23px;
      border-radius: 23px;  
   }

       .glyphicon{
       font-size: 60px;
        color: black;
         text-shadow: -2px 0 black, 0 2px black, 2px 0 black, 0 -2px black;
          }

HTML 和 JS/JQuery:

         <!-- Indicators -->
         <ul class="carousel-indicators">
          <li data-target="#demo" data-slide-to="0" class="active"></li>
          <li data-target="#demo" data-slide-to="1"></li>
           <li data-target="#demo" data-slide-to="2"></li>
           </ul>

        <!-- Wrapper for slides -->
      <div class="carousel-inner">
       <div class="carousel-item active"> 
        <div id="chartContainer1" class="chart" style="width:100%; 
      height:360px;"></div>
      </div>

      <div class="carousel-item">
       <div id="chartContainer2" class="chart" style="width:100%; 
        height:360px;"></div>
       </div>

        <div class="carousel-item">
         <div id="chartContainer3" class="chart" style="width:100%; 
         height:360px;"></div>
        </div>
        </div>

          <!-- Left and right controls -->
          <a class="carousel-control-prev" href="#demo" data-slide="prev">
          <span class="carousel-control-prev-icon"></span>
          </a>
          <a class="carousel-control-next" href="#demo" data-slide="next">
         <span class="carousel-control-next-icon"></span>
           </a>
          </div>


        <script> 
        var chart;
         var charts = [];
          var width;
         var height;

        width = $('#demo').width();
        height = $('#demo').height();

         $('.carousel').carousel({
        interval: false,
           });

            chart = new CanvasJS.Chart("chartContainer1", {
             title: {
             text: "Column Chart"
              },
          width: width,
         height: height,
         data: [{
           type: "column",
           dataPoints: [{
            x: 10,
            y: 171
             }, {
              x: 20,
             y: 155
               }, {
             x: 30,
             y: 150
                }, {
              x: 40,
               y: 165
               }, {
              x: 50,
              y: 195
               }, {
              x: 60,
              y: 168
               }, {
               x: 70,
               y: 128
                }, {
              x: 80,
              y: 134
               }, {
              x: 90,
              y: 114
               }]
               }]
              });
         chart.render();
        charts.push(chart);

        chart = new CanvasJS.Chart("chartContainer2", {
          title: {
            text: "Line Chart"
               },
           width: width,
            height: height,
              data: [{
             type: "line",
               dataPoints: [{
              x: 10,
                y: 71
                  }, {
                x: 20,
                y: 55
                 }, {
                x: 30,
                 y: 50
                 }, {
                 x: 40,
                 y: 65
                 }, {
                x: 50,
                y: 95
                  } , {
                x: 60,
                 y: 68
                }, {
                 x: 70,
               y: 28
                 }, {
                x: 80,
                y: 34
                 }, {
               x: 90,
                 y: 14
                  }]
                   }]
                  });
           chart.render();
           charts.push(chart);

            chart = new CanvasJS.Chart("chartContainer3", {
             title: {
              text: "Area Chart"
                  },
            width: width,
             height: height,
              data: [{
              type: "area",
               dataPoints: [{
                 x: 10,
                 y: 71
                  }, {
                 x: 20,
                  y: 55
                  }, {
                   x: 30,
                    y: 50
                     }, {
                    x: 40,
                    y: 65
                      }, {
                     x: 50,
                      y: 95
                       }, {
                     x: 60,
                    y: 68
                      }, {
                     x: 70,
                       y: 28
                      }, {
                       x: 80,
                       y: 34
                       }, {
                     x: 90,
                      y: 14
                        }]
                        }]
                         });
                   chart.render();
                   charts.push(chart);

                 $(window).resize(function() {
                 for (var i = 0; i < charts.length; i++) {
                  charts[i].options.width = $('.carousel').width();
                    charts[i].options.height = $('.carousel').height();
                charts[i].render();
                     }
                      });

                      </script> 

【问题讨论】:

    标签: jquery html charts bootstrap-4 canvasjs


    【解决方案1】:

    您可以在 Bootstrap Carousel 中渲染图表。看看这个JSFiddle 或者找到下面的代码。

    var charts = [];
    
    var dps = [
      { x: 10, y: 71 },
      { x: 20, y: 55},
      { x: 30, y: 50 },
      { x: 40, y: 65 },
      { x: 50, y: 95 },
      { x: 60, y: 68 },
      { x: 70, y: 28 },
      { x: 80, y: 34 },
      { x: 90, y: 14}
    ];
    
    $('.carousel').carousel({
      interval: 2000
    });
    
    $('.carousel').on('slide.bs.carousel', function (e) {
      $(".carousel-inner").height(parseFloat(charts[e.to].container.style.height));
    });
    
    $('.carousel').on('slid.bs.carousel', function (e) {
      charts[e.to].render();
    });
    
    var chart1 = new CanvasJS.Chart("chartContainer1", {
      title: {
    text: "Column Chart"
      },
      data: [{
    type: "column",
    dataPoints: dps
      }]
    });
    chart1.render();
    charts.push(chart1);
    
    var chart2 = new CanvasJS.Chart("chartContainer2", {
      title: {
    text: "Spline Chart"
      },
      data: [{
    type: "spline",
    dataPoints: dps
      }]
    });
    charts.push(chart2);
    
    var chart3 = new CanvasJS.Chart("chartContainer3", {
      title: {
    text: "Area Chart"
      },
      data: [{
    type: "area",
    dataPoints: dps
      }]
    });
    charts.push(chart3);
    <script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
      
      <div id="chart-carousel" class="carousel slide" data-ride="carousel">
     
      <!-- Wrapper for slides -->
      <div class="carousel-inner">
        <div class="carousel-item active">  
          <div id="chartContainer1" class="chart" style="width:100%; height:300px;"></div>
        </div>
        <div class="carousel-item">
          <div id="chartContainer2" class="chart" style="width:100%; height:300px;"></div>
        </div>
        <div class="carousel-item">
         <div id="chartContainer3" class="chart" style="width:100%; height:300px;"></div>
        </div>
      </div>
     
     <!-- Left and right controls -->
      <a class="carousel-control-prev" href="#chart-carousel" data-slide="prev">
        <span class="carousel-control-prev-icon"></span>
      </a>
      <a class="carousel-control-next" href="#chart-carousel" data-slide="next">
        <span class="carousel-control-next-icon"></span>
      </a>
    </div> <!-- Carousel -->

    【讨论】:

      【解决方案2】:

      首先确保您的 Bootstrap 轮播可以正常工作。

      这是基于 Bootstrap 文档,来自这里:https://getbootstrap.com/docs/4.0/components/carousel/

      我包含最新版本的 jQuery 和 Bootstrap 4 的 CDN。

      我也在使用来自https://placeholder.com 的占位符图片。

      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
      <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
      <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
        <ol class="carousel-indicators">
          <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
          <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
          <li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
        </ol>
        <div class="carousel-inner">
          <div class="carousel-item active">
            <img class="d-block w-100" src="http://placehold.it/120x120&text=image1" alt="First slide">
          </div>
          <div class="carousel-item">
            <img class="d-block w-100" src="http://placehold.it/120x120&text=image2" alt="Second slide">
          </div>
          <div class="carousel-item">
            <img class="d-block w-100" src="http://placehold.it/120x120&text=image3" alt="Third slide">
          </div>
        </div>
        <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
          <span class="carousel-control-prev-icon" aria-hidden="true"></span>
          <span class="sr-only">Previous</span>
        </a>
        <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
          <span class="carousel-control-next-icon" aria-hidden="true"></span>
          <span class="sr-only">Next</span>
        </a>
      </div>

      如果您的 Bootstrap Carousel 可以正确处理一些占位符图像,那么您可以专注于让您的图表在轮播中正确显示。

      【讨论】:

        猜你喜欢
        • 2018-07-16
        • 2015-01-02
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 2016-05-01
        • 2019-07-07
        相关资源
        最近更新 更多