vis.js 时间轴,不要堆叠没有时间重叠的项目
vis.js timeline, don't stack items with no time overlap
我正在使用 vis.js 来显示时间线。
我有以下物品:
var items = new vis.DataSet([
{id: 1, content: '1) Next To 2', start: '2014-04-20 00:00:00', end : '2014-04-20 00:59:59'},
{id: 2, content: '2) Next To 1', start: '2014-04-20 01:00:00', end : '2014-04-20 02:59:59'},
{id: 3, content: 'Underneath ', start: '2014-04-20 00:00:00', end : '2014-04-20 05:59:59'}
]);
id 1 和 id 2 start/end 不相互重叠(时间上)。所以我总是希望它们出现在时间轴的同一行上,而不管缩放级别如何。
但是我无法设置 stack : false
,因为我希望 id : 3
位于 1 和 2 的下方。
这是一个 JSFiddle:http://jsfiddle.net/uqn6q4jd/17/
1) 和 2) 应该始终在同一行,
3) 总是在下面
我能完成吗?
我看过 Vis JS 源代码,觉得我可以通过更改以下内容来实现我需要的:
exports.stack = function...
exports.nostack = function...
如果我缺少某个设置或功能,那将是我进行更改的首选途径...
我目前正在使用 vis 并且遇到了类似的问题。如果范围不重叠且不太小,删除水平项边距应该就可以了:
var options = {
margin: {
item : {
horizontal : 0
}
}
};
不过,如果您缩小得太远,它们仍会开始堆叠。每组堆叠选项是 a requested feature,并且一旦实施也可能会执行您想要的操作。
您(现在)应该能够通过子组实现这一目标。
当关闭堆叠时,子组仍然可以有效堆叠(但是当你缩小等时不要折叠回来,所以它们只是"separated into rows"而不是通过动态堆叠功能实际管理)。
您需要通过 an overlap check 预先计算您的子组,这可能会变得复杂,具体取决于您的数据。
具体到您的示例 1 和 2 将在子组 1 中,而项目 3 在子组 2 中。子组排序将确保 sg2 低于 sg1。
var items = new vis.DataSet([
{id: 1, subgroup:1, content: '1) Next To 2', start: '2014-04-20 00:00:00', end : '2014-04-20 00:59:59'},
{id: 2, subgroup:1, content: '2) Next To 1', start: '2014-04-20 01:00:00', end : '2014-04-20 02:59:59'},
{id: 3, subgroup:2, content: 'Underneath ', start: '2014-04-20 00:00:00', end : '2014-04-20 05:59:59'}
]);
子组是 documented here
子组排序为 documented here
我只是使用这种方法作为实现每个组的变通方法 stacking/or 而不是,正如@Kazua 有益地指出的那样,这仍然是一个请求的功能。
对于以后遇到此问题的任何人。
如果项目不重叠并同时或几乎同时开始,我只是让堆叠保持打开状态,并在水平边距选项上设置 -25。
margin: {
item: 0,
axis: 0,
item : {
horizontal : -25
}
},
这又将所有不重叠的项目放在同一行,如果项目重叠则堆叠。
我也在用vis.js - Timeline Version:4.19.1
。
var options = {
margin: {
item : {
horizontal : -1
}
}
};
我使用了 -1,因此您无需放大即可看到堆叠的效果
我正在使用 vis.js 来显示时间线。
我有以下物品:
var items = new vis.DataSet([
{id: 1, content: '1) Next To 2', start: '2014-04-20 00:00:00', end : '2014-04-20 00:59:59'},
{id: 2, content: '2) Next To 1', start: '2014-04-20 01:00:00', end : '2014-04-20 02:59:59'},
{id: 3, content: 'Underneath ', start: '2014-04-20 00:00:00', end : '2014-04-20 05:59:59'}
]);
id 1 和 id 2 start/end 不相互重叠(时间上)。所以我总是希望它们出现在时间轴的同一行上,而不管缩放级别如何。
但是我无法设置 stack : false
,因为我希望 id : 3
位于 1 和 2 的下方。
这是一个 JSFiddle:http://jsfiddle.net/uqn6q4jd/17/
1) 和 2) 应该始终在同一行, 3) 总是在下面
我能完成吗?
我看过 Vis JS 源代码,觉得我可以通过更改以下内容来实现我需要的:
exports.stack = function...
exports.nostack = function...
如果我缺少某个设置或功能,那将是我进行更改的首选途径...
我目前正在使用 vis 并且遇到了类似的问题。如果范围不重叠且不太小,删除水平项边距应该就可以了:
var options = {
margin: {
item : {
horizontal : 0
}
}
};
不过,如果您缩小得太远,它们仍会开始堆叠。每组堆叠选项是 a requested feature,并且一旦实施也可能会执行您想要的操作。
您(现在)应该能够通过子组实现这一目标。
当关闭堆叠时,子组仍然可以有效堆叠(但是当你缩小等时不要折叠回来,所以它们只是"separated into rows"而不是通过动态堆叠功能实际管理)。
您需要通过 an overlap check 预先计算您的子组,这可能会变得复杂,具体取决于您的数据。
具体到您的示例 1 和 2 将在子组 1 中,而项目 3 在子组 2 中。子组排序将确保 sg2 低于 sg1。
var items = new vis.DataSet([
{id: 1, subgroup:1, content: '1) Next To 2', start: '2014-04-20 00:00:00', end : '2014-04-20 00:59:59'},
{id: 2, subgroup:1, content: '2) Next To 1', start: '2014-04-20 01:00:00', end : '2014-04-20 02:59:59'},
{id: 3, subgroup:2, content: 'Underneath ', start: '2014-04-20 00:00:00', end : '2014-04-20 05:59:59'}
]);
子组是 documented here
子组排序为 documented here
我只是使用这种方法作为实现每个组的变通方法 stacking/or 而不是,正如@Kazua 有益地指出的那样,这仍然是一个请求的功能。
对于以后遇到此问题的任何人。
如果项目不重叠并同时或几乎同时开始,我只是让堆叠保持打开状态,并在水平边距选项上设置 -25。
margin: {
item: 0,
axis: 0,
item : {
horizontal : -25
}
},
这又将所有不重叠的项目放在同一行,如果项目重叠则堆叠。
我也在用vis.js - Timeline Version:4.19.1
。
var options = {
margin: {
item : {
horizontal : -1
}
}
};
我使用了 -1,因此您无需放大即可看到堆叠的效果