首页 文章

响应式Highcharts在窗口调整大小之前没有正确调整大小

提问于
浏览
47

我在Zurb的Foundation框架中使用Highcharts进行课堂项目 . 我在章节标签中有三个图表 . 一个在12列div中,另外两个在6列div中的同一行 .

当页面加载时,特色图表不占用12列的可用宽度,两个较小的图表溢出它们的6列 . 但是,当窗口调整大小或我尝试使用Inspect元素进行调查时,图表会立即捕捉到正确的尺寸 . 在Chrome,FF和IE中会出现此问题 .

我意识到我可以设置一个特定的宽度,但我真的想利用基金会并让他们保持敏感 .

我已经调整了CSS和Highcharts初始化,但我很难过 . 还有其他人遇到过这个问题吗?任何人都能看到我错过的东西吗?

这是我的HTML的摘录:

<div class="row">
<div class="twelve columns">
    <!--begin tabs below--> 
    <div class="section-container tabs" data-section="tabs">
      <section>
        <p class="title" data-section-title><a href="#">Heart Disease</a></p>
        <div class="content" data-section-content id="heart">

            <div class="row feature-chart">
                <div class="large-12 columns">
                    <div id="heartTimeline-container">
                    <div id="heartTimeline"></div>
                    </div>
                </div> <!--close 12 columns-->
            </div> <!--close row-->
            <div class="row small-charts">
                <div class="large-6 columns">
                    <div id="heartDemo"></div>
                </div>
                <!--close 6-->
                <div class="large-6 columns">
                    <div id="heartStages"></div>
                </div>
                <!--close 6-->
            </div>
            <!--end row-->
        </div>
      </section>
   </div>
   </div>
   <!--end twelve columns-->

这是Highcharts js:

$(function () {
    Highcharts.setOptions({
        colors: ['#1A1A1A', '#455D78', '#BDCCD4', '#999999', '#B3B3B3', '#F2F2F2']
    });
    $('#heartTimeline').highcharts({
        chart: {
            type: 'area'
        },
        title: {
            text: 'Heart Disease Death Rates in the U.S.from 1980-2010'
        },
        subtitle: {
            text: 'Source: <a href="http://www.mdch.state.mi.us/pha/osr/deaths/Heartdx.asp">'+ 
                        'Michigan Department of Community Health</a>'
        },
        xAxis: {
            labels: {
                formatter: function() {
                    return this.value; // clean, unformatted number for year
                }
            }
        },
        yAxis: {
            title: {
                text: 'Heart Disease Death Rate Per 100,000 People'
            },
            labels: {
                formatter: function() {
                    return this.value / 1 +'k';
                }
            }
        },
        tooltip: {
            pointFormat: '{series.name} produced <b>{point.y:,.0f}</b>
deaths per hundred thousand people in {point.x}' }, plotOptions: { area: { pointStart: 1980, marker: { enabled: false, symbol: 'circle', radius: 2, states: { hover: { enabled: true } } } } }, series: [{ name: 'Heart Disease', data: [412.1, 397, 389, 388, 378, 375, 365.1, 355.9, 352.5, 332, 321.8, 313.8, 306.1, 309.9, 299.7, 296.3, 288.3, 280.4, 272.4, 267.8, 257.9, 247.8, 240.8, 232.3, 217, 211.1, 200.2, 190.9, 186.5, 180.1, 178.5] }, ] }); }); $(function () { $('#heartDemo').highcharts({ chart: { zoomType: 'xy' }, title: { text: 'Most Prevelant Causes and Effects of Heart Disease 2013' }, subtitle: { text: 'Source: http://circ.ahajournals.org (The American Heart Association)' }, xAxis: [{ categories: ['Smoking', 'Obesity (BMI > 25 kg) ', 'Total cholesterol > 200 mg)', 'High Blood Pressure', 'Diabetes Mellitus', 'Prediabetes', 'Total Cardiovascular Disease', 'Stroke', 'Coronary Heart Disease', 'Heart Failure'], labels: { rotation: -90, align:'right' } }], yAxis: [{ // Primary yAxis labels: { formatter: function() { return this.value +'%'; }, style: { color: '#000000' } }, title: { text: 'Men', style: { color: '#BDCCD4' } }, opposite: true }, { // Secondary yAxis gridLineWidth: 0, title: { text: 'Both Sexes', style: { color: '#455D78' } }, labels: { formatter: function() { return this.value +' %'; }, style: { color: '#4572A7' } } }, { // Tertiary yAxis gridLineWidth: 0, title: { text: 'Women', style: { color: '#AA4643' } }, labels: { formatter: function() { return this.value +' %'; }, style: { color: '#AA4643' } }, opposite: true }], tooltip: { shared: true }, legend: { layout: 'vertical', align: 'left', x: 120, verticalAlign: 'top', y: 80, floating: true, backgroundColor: '#FFFFFF' }, series: [{ name: 'Both Sexes', color: '#455D78', type: 'column', yAxis: 1, data: [19, 68.2, 43.4, 33, 8.3, 38.2, 35.3, 2.8, 6.4, 2.1], tooltip: { valueSuffix: ' %' } }, { name: 'Women', type: 'spline', color: '#AA4643', yAxis: 2, data: [16.7, 63.7, 44.9, 32.2, 7.9, 30.5, 34, 3, 5.1, 1.8], marker: { enabled: false }, dashStyle: 'shortdot', tooltip: { valueSuffix: ' %' } }, { name: 'Men', color: '#BDCCD4', type: 'spline', data: [21.3, 72.9, 41.3, 33.6, 8.7, 46, 36.7, 2.6, 7.9, 2.5], tooltip: { valueSuffix: ' %' } }] }); }); $(function () { $('#heartStages').highcharts({ chart: { type: 'column' }, title: { text: 'Number of Deaths for Different Types of Heart Diseases in the U.S. for 2008' }, subtitle: { text: 'Source: <a href="http://www.nhlbi.nih.gov/resources/docs/2012_ChartBook_508.pdf">'+ 'Morbitity & Mortality: 2012 Chart Book on Cardiovascular, Lung and Blood Disease</a>' }, xAxis: { categories: [ 'Coronary Heart Disease', 'Heart Attack', 'Cardiomyopathy', 'Stroke', 'Atrial Fibrillation and Flutter', 'Heart Failure', 'Diseases of Pulmonary Circulation', 'Pulmonary Embolism', ], labels: { rotation: -90, align:'right' } }, yAxis: { min: 0, title: { text: 'Heart Disease Diagnostic Category (thousands)' } }, tooltip: { headerFormat: '<span style="font-size:10px">{point.key}</span><table>', pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' + '<td style="padding:0"><b>{point.y:.1f} </b></td></tr>', footerFormat: '</table>', shared: true, useHTML: true }, plotOptions: { column: { pointPadding: 0.2, borderWidth: 0 } }, series: [{ name: 'Heart Disease Related Deaths for 2008', data: [405.309, 133.958, 23.932, 134.148, 15.383, 56.830, 12.927, 7.158] }] }); });

11 回答

  • 8

    这可能有所帮助:

    $(Highcharts.charts).each(function(i,chart){
        var height = chart.renderTo.clientHeight; 
        var width = chart.renderTo.clientWidth; 
        chart.setSize(width, height); 
      });
    
  • 0

    您可以添加事件侦听器,以便每次重绘时图表都会调整大小:

    mychart = new Highcharts.stockChart('div',   {
        chart: {
            events: {
                redraw: function(e) {
                    mychart.reflow();
                }
            }
        },
    
  • 0

    对我来说,它需要一些延迟并触发窗口调整大小 .

    window.setTimeout(function(){ $(window).trigger('resize'); }, 500);
    
  • 16

    只需使用 chart.reflow() 功能即可

  • 1

    请使用响应式highcharts查看这些示例:

    http://jsbin.com/anuqav/1/edit

    http://jsfiddle.net/2gtpA/show/

    <div id="container" style="width:100%;margin: 0 auto"></div>
    
  • 38

    我从另一个答案中得到了这个,所以给予一些信用in this question .

    解决方案:在加载图形之后调用 $(window).resize(); (或者在用数据填充它时)

  • 0

    现在排序一个旧主题,但我在IE8中遇到了这个问题 . 在撰写本文时,IE的当前版本是IE10,但我需要使我的网站与早期版本兼容 . 对我有用的解决方案是上述和其他网站的组合,人们谈到了他们实施的解决方案 . 我去了一个settimeout加上一个调整大小并且刚刚执行了IE8,我希望这能帮助像我一样的其他人试图找几个小时的解决方案 .

    您可能会发现 script 部分是您需要的唯一部分 .

    <!--[if IE 8]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
      <script>
        function timeout() {
            $(window).resize();
        }
        window.setTimeout(function() {
            timeout();
        },2000);
      </script>
      <style>
        .highcharts-container{width:100% !important; height:100% !important;}
      </style>
    <![endif]-->
    
  • 0

    您可以将此代码用于示例

    var chart;
    $(function() {
      var newh = $("#container").height();
        $( window ).resize(function() {
        newh = $("#container").height();
        chart.redraw();
        chart.reflow();
      });
      chart = new Highcharts.Chart();
    })
    

    http://jsfiddle.net/Behseini/qheh4w0n/

  • -2

    只有这对我有用

    $(window).resize(function(){ 
        $scope.chartConfig.getChartObj().reflow() 
    });
    
  • 19

    只想添加另一个解决方案:

    $('.chart').highcharts(options, function(chart) {
      setTimeout(function() {
        chart.reflow();
      });
    });
    

    它的作用是在渲染后的下一帧中重新绘制图表 .

  • 2
    $(Highcharts.charts).each(function(i,chart){
        var height = chart.renderTo.clientHeight; 
        var width = chart.renderTo.clientWidth; 
        chart.setSize(width, height);
        });
    

    这个对我有用

相关问题