只需制作一个小代码,通过鼠标拖动动态更改窗格的高度。但动画不稳定。任何使它更顺畅的解决方案?
似乎代码更新了图表细节并同时重绘,因此其中一个窗格与另一个窗格相比具有较旧的值。
这个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();
}
});
答案 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(工具提示看起来很奇怪)。