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

jko*_*icz 4 javascript phantomjs d3.js nvd3.js

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

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

PhantomJS使用print媒体类型来渲染PDF,因此很容易禁用任何CSS3动画(使用媒体查询),但我找不到任何关闭D3转换的方法(换句话说 - 强制默认转换持续时间为0).我可以print在JavaScript中检测媒体类型,但找不到全局关闭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);
Run Code Online (Sandbox Code Playgroud)

小智 9

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

chart.duration(0);
Run Code Online (Sandbox Code Playgroud)