有没有办法在下载时显示正确的切换图例?

Posted

技术标签:

【中文标题】有没有办法在下载时显示正确的切换图例?【英文标题】:Is there a way to make the correct toggled legends appear when downloading? 【发布时间】:2019-11-30 14:25:41 【问题描述】:

我正在使用 c3 图表。我有一个使用canvg下载它的按钮。当点击图例时,我也有它切换栏。下载有效,切换也有效。

下载中唯一的问题是,我要么总是显示图例(即使它们对应的条没有显示),要么一旦我切换图例,图例就再也不会出现在下载中(尽管它确实在图表本身上)。

我希望图例仅在其相应的条实际显示时才出现。如果正在显示它们的栏,我也不希望隐藏传说。 (Legend Shown Bar Shown 种关系)

我过去遇到过 IE 问题,所以在 https://github.com/c3js/c3/issues/2528 之后显示为“阻止”。

var string = ".c3-legend-item-hidden";//hides legends that are unselected in the download. Will KEEP them hidden even if retoggled :( 

d3.selectAll(string).each(function() 
    var element = this;
    var computedStyle = getComputedStyle(element, null);
    for (var i = 0; i < computedStyle.length; i++) 
        var property = computedStyle.item(i);
        element.style[property] = computedStyle.getPropertyValue(property);
    
);

//removing this section makes all legends appear permanently regardless of whether the bar does

预期:a graph that has the correct bars and legends shown in the downloads

实际:

(带代码段)hidden legends that do not reappear when needed

(无代码段)legends that are never hidden

更新:澄清一下,这在将图形转换为下载的 svg 文件(添加 xmlns 等)时有效,只是在使用 canvg 并下载到 png 文件时无效(这是我需要它做的)。

【问题讨论】:

【参考方案1】:

不要使用计算的样式,而是手动设置您需要的样式。

此解决方案对我有用(“隐藏”图例略微可见,但现在与我个人需要的实际图表相同):

var string = ".c3-legend-item-hidden";

d3.selectAll(string).each(function() 
 //this.style['visibility']='hidden'; // uncomment this out and it will completely hide the legend if that is what you want
 this.style['opacity']= 0.15; 
 // set opacity as 0 to make the legend transparent to the point you can't see it (if that is what you want) 
 // or 0.15 to make it like the chart (as done here and in c3.css)
);

计算的样式提供的样式比您需要的多得多,并且可以覆盖您想要的样式。

【讨论】:

以上是关于有没有办法在下载时显示正确的切换图例?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在我单击图像时显示切换菜单?

切换图例顺序 [重复]

在活动之间切换时显示白屏

Highcharts 图例索引在图例点击时显示 -1

如何在图例悬停时显示工具提示?

javascript 单击时显示,隐藏和切换div