求助:如何修改Google Visualization Timeline条形图的边框样式?
解决Google Visualization Timeline条形图边框不显示的问题
Google Visualization Timeline的style角色并不支持stroke这类CSS属性,直接在样式字符串里添加stroke: rgb(0,0,0)不会生效。要给条形图添加边框,得通过监听图表就绪事件后手动操作DOM元素来实现,具体方案如下:
实现步骤
- 监听Timeline的
ready事件,确保图表完全渲染后再操作DOM - 筛选出所有数据条形对应的
<rect>元素(Timeline的条形均以SVG的rect标签绘制) - 给目标rect元素添加边框相关的SVG属性
修改后的代码示例
JavaScript 代码
google.charts.load("current", {packages:["timeline"]}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var container = document.getElementById('example5.6'); var chart = new google.visualization.Timeline(container); var dataTable = new google.visualization.DataTable(); dataTable.addColumn({ type: 'string', id: 'Role' }); dataTable.addColumn({ type: 'string', id: 'Name' }); dataTable.addColumn({ type: 'string', id: 'style', role: 'style' }); dataTable.addColumn({ type: 'date', id: 'Start' }); dataTable.addColumn({ type: 'date', id: 'End' }); dataTable.addRows([ [ 'President', 'George Washington', "color: lightyellow;", new Date(1789, 3, 30), new Date(1797, 2, 4)], [ 'President', 'John Adams', "color: lightgreen;", new Date(1797, 2, 4), new Date(1801, 2, 4) ], [ 'President', 'Thomas Jefferson', "color: lightblue;", new Date(1801, 2, 4), new Date(1809, 2, 4) ]]); // 图表就绪后添加边框 google.visualization.events.addListener(chart, 'ready', function() { var bars = container.getElementsByTagName('rect'); for (var i = 0; i < bars.length; i++) { // 排除背景网格的rect,仅对数据条形生效 var fillColor = bars[i].getAttribute('fill'); if (fillColor !== '#ffffff' && fillColor !== '#e0e0e0') { bars[i].setAttribute('stroke', '#000000'); bars[i].setAttribute('stroke-width', '1'); } } }); chart.draw(dataTable); }
HTML 代码
<script src="https://www.gstatic.com/charts/loader.js"></script> <div id="example5.6" style="height: 150px;"></div>
补充说明
- 筛选条件里排除
#ffffff和#e0e0e0的rect,是因为Timeline会自动渲染背景网格、空白区域的rect,我们只需要给实际数据条形加边框 - 如果需要更精准的筛选,可以通过查看元素的父类(比如数据条形的父容器通常带有
google-visualization-timeline-bar-container类)来缩小范围
内容的提问来源于stack exchange,提问作者cmill
相关产品推荐
相关产品推荐

