如何在NVD3中全局更改转换持续时间?

时间:2014-03-23 11:07:20

标签: javascript d3.js phantomjs nvd3.js

我想将NVD3图表转换为PDF文档。这些图表通常显示在浏览器中(我无法为每个图表创建单独的打印和显示实例),我使用PhantomJS完成了所有工作,但我遇到了一个我似乎无法解决的问题找到一个很好的解决方案。

所有NVD3模型都使用转换,但只有部分转换受transitionDuration选项的影响。由于这些转换,我现在必须在"捕获"之前使用超时。 PhantomJS中的屏幕制作PDF,否则会导致文档在转换过程中拍摄那些图表。显然,我不必等待。

PhantomJS使用print媒体类型来渲染PDF,因此很容易禁用任何CSS3动画(使用媒体查询),但我找不到任何方法可以关闭D3过渡(换句话说 - 强制默认转换持续时间为0)。我可以在JavaScript中检测到print媒体类型,但无法在D3 / NVD3中找到全局关闭动画的好方法...这就是我所拥有的所有内容真的做得很多:

var chart = nv.models.multiBarChart()
    .tooltipContent(tooltip)
    .stacked(true)
    .showControls(false);

var duration = 1000; // default duration
if(window.matchMedia) {
    if(window.matchMedia('print').matches) {
        duration = 1; // duration for print 
    }
}

chart.transitionDuration(duration);

2 个答案:

答案 0 :(得分:9)

从NVD3 1.7.1开始,您可以使用持续时间选项:

chart.duration(0);

答案 1 :(得分:3)

我想不出另一个解决方案,而不是修改nvd3源。如果替换

的所有发生
    transitionDuration = 250

    transitionDuration = 0
在nv.d3.js中它应该可以工作。