作者:LeonaL_1巛980 | 来源:互联网 | 2023-02-07 17:52
我正在使用morris.js图表以及bootstrap滑块.
我想做的事:
如果移动滑块,我想在滑块值的位置插入一个事件线到图表中.没什么特别的.
问题:
设置事件后图表没有重绘.插入新数据时,将自动重绘图表.所以我尝试通过将现有数据再次传递给图表来刷新(以检查正确的语法),如下所示:
chart.setData(chart.options.data);
这很有效!新事件将被绘制到图表中.不幸的是,由于图表正在重绘所有数据,因此效果不佳.
文件说有chart.redraw()
.这对我不起作用.也许有人可以找出原因.
只需运行代码段并切换单选按钮以测试这两种方法,您就会看到问题所在.
// Chart creation - not interesting
var chart = new Morris.Line({
element: 'chart',
ymin: 0,
ymax: 100,
gridIntegers: true,
parseTime:false,
// Will be set below
data: [ ],
xkey: 'position',
ykeys: ['value'],
labels: ['Value'],
hideHover: "always",
pointSize: 0,
continuousLine: false,
goalStrokeWidth: 3,
axes: true,
grid: true,
numLines: 6,
eventLineColors: [ "red" ],
smooth: true
});
// Inserting some values
var values = [101]
for(i = 1; i <= 100; i += 1) {
var x = 100/(Math.pow((i-50), 2)+4);
values.push({ position: i, value: x });
}
chart.setData(values);
// Create slider
$('#slider').slider({
tooltip: 'never',
tooltip_position:'left',
height: 300,
length: 300,
});
// If the slider moves, I want to set its value as an event-line
$("#slider").on("slideStop", function(slideEvt) {
chart.options.events = [ slideEvt.value ];
// Check inserting-data VS chart.redraw()
// Both should work... chart.redraw() isnt.
if(document.getElementById('insert').checked)
chart.setData(chart.options.data);
else if(document.getElementById('redraw').checked)
chart.redraw();
});
Insert (working)
Redraw (not working)
我很感激这里的每一个帮助.非常感谢你!
重要编辑:
只要我能设置赏金(+1小时),我就会这样做.这个问题的一个非常重要的附加部分是如何将滑块绑定到单个图表事件而不会滞后.目前使用slide
事件时的性能非常低,而不是slideStop
.