HighCharts / jQuery:chart.redraw慢 - 可以提高速度吗?

时间:2013-12-24 05:22:35

标签: jquery highcharts

只需制作一个小代码,通过鼠标拖动动态更改窗格的高度。但动画不稳定。任何使它更顺畅的解决方案?

似乎代码更新了图表细节并同时重绘,因此其中一个窗格与另一个窗格相比具有较旧的值。

这个jsfiddle用于演示。

更新

尝试使用$.when$.finish here,但仍无效:(

由于

以下代码:

$(function () {
    $.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-ohlcv.json&callback=?', function (data) {

        // split the data set into ohlc and volume
        var ohlc = [],
            volume = [],
            dataLength = data.length;

        for (i = 0; i < dataLength; i++) {
            ohlc.push([
            data[i][0], // the date
            data[i][3], // open
            data[i][2], // high
            data[i][3], // low
            data[i][4] // close
            ]);

            volume.push([
            data[i][0], // the date
            data[i][5] // the volume
            ])
        }

        // set the allowed units for data grouping
        var groupingUnits = [
            [
                'week', // unit name
            [1] // allowed multiples
            ],
            [
                'month', [1, 2, 3, 4, 6]]
        ];

        // create the chart
        $('#container').highcharts('StockChart', {
            chart: {
                animation: {
                    duration: 200
                }
            },

            rangeSelector: {
                selected: 1,
                enabled: false
            },

            navigator: {
                enabled: false
            },
            scrollbar: {
                enabled: false
            },
            yAxis: [{
                title: {
                    text: 'OHLC'
                },
                height: 200,
                lineWidth: 2
            }, {
                title: {
                    text: 'Volume'
                },
                top: 200,
                height: 100,
                offset: 0,
                lineWidth: 2
            }],

            series: [{
                type: 'candlestick',
                name: 'AAPL',
                data: ohlc,
                dataGrouping: {
                    units: groupingUnits
                }
            }, {
                type: 'column',
                name: 'Volume',
                data: volume,
                yAxis: 1,
                dataGrouping: {
                    units: groupingUnits
                }
            }]
        });
    });
});
$('.rsh').draggable({
    axis: 'y',
    containment: 'parent',
    helper: 'clone',
    drag: function (event, ui) {
        var chart=jQuery("#container").highcharts();
var _redraw = chart.redraw;
chart.redraw = function(){};        
        var height1 = ui.offset.top;
        jQuery(".rsh").css("top", height1);

        chart.yAxis[0].update({
            'height': height1
        }, false);
        chart.yAxis[1].update({
            'top': height1,
            'height': 300-height1
        }, false);
chart.redraw = _redraw;
        chart.redraw();
    }
});

1 个答案:

答案 0 :(得分:2)

只需在拖动时禁用动画,否则您将运行1000ms动画,每次拖动窗格时都会启动新动画。固定解决方案:http://jsfiddle.net/LTgQS/6/

$('.rsh').draggable({
  axis: 'y',
  containment: 'parent',
  helper: 'clone',
  drag: function (event, ui) {
    var chart = jQuery("#container").highcharts();
    var height1 = ui.offset.top;
    jQuery(".rsh").css("top", height1);

    chart.yAxis[0].update({
        'height': height1
    }, false);
    chart.yAxis[1].update({
        'top': height1,
            'height': 300 - height1
    }, false);
    chart.redraw(false);
  }
});

尝试使用Highcharts.Renderer添加path,而不是使用位于图表上方的div(工具提示看起来很奇怪)。