我已经使用react-plotly.js实现了散点图,我希望图表在页面布局改变时能够自动调整大小,但目前图表的布局不会自动改变,如果我显式地在图表上执行一些函数,强制图表自动重绘,那么只有图表宽度会改变。
我应用了useResizeHandler属性,并将autosize设置为true,但这也没有任何区别。
<Plot
useResizeHandler
style={{ width: '100%' }}
data={chartData}
onClick={(data) => this.handlePlotClick(data)}
type={'scatter'}
layout={this.layout} />
const layout = {
autosize: true,
dragmode: true,
margin: {
l: 5,
r: 5,
t: 10,
b: 10,
pad: 0,
autoexpand: true
},
hovermode: 'closest',
hoverlabel: {
bgcolor: 'rgba(0,0,0,1)',
bordercolor: 'rgba(200,200,200,1)'
},
height: '650',
yaxis: {
visible: false
},
xaxis: {
autorange: false,
showline: true,
fixedrange: false, // true disables range selection on main graph
rangeslider: {
range: this.state.sliderRange,
visible: true,
borderwidth: 1,
bordercolor: '#000'
}
}
};
}
x1c 0d1x正如你在上面的屏幕截图中看到的,div.svg-container和main-svg的宽度相同。但是它仍然在右边留白色。我无法调试为什么它会这样。如果我显式地在图表上执行缩放来重绘绘图,那么它会正确地工作。但是我希望它在页面布局改变时自动调整大小。
2条答案
按热度按时间gcuhipw91#
我也被这个问题卡住了。试试http://codrate.com/questions/how-can-trigger-the-window-resize-event-manually-in-javascript中的window.dispatchEvent(new Event('resize ')
当通过拖动调整图表大小时,我调用了resizeHandler。
图表总是在调整大小时自动缩放,所以我基本上是在图表大小改变时触发窗口大小调整,所以对您来说,当您检测到页面布局改变时,可以触发窗口大小调整。
wmomyfyw2#
下面是一个完整的实现,它包含一个可调整大小的div,这样用户就可以通过调整父div的大小来调整绘图的大小;它使用的是ResizeObserver。这与您的问题略有不同,但我觉得它对其他搜索此问题的人会很有用。
这个精巧的图形位于一个定制的ResizableDiv组件中。