使用transform属性时D3.js文本翻转问题的解决咨询
解决D3.js中父组矩阵变换导致的文本翻转问题
你使用的矩阵[1, 0, 0, -1, 0, 500]对y轴做了反转缩放(第四个参数为-1),这会导致组内所有元素包括文本上下翻转。要保留父组的变换同时修正文本显示,只需给文本单独添加一个反向的y轴反转变换,抵消父组的翻转效果,同时调整文本的位置以匹配原布局。
修改后的代码:
var amatrix = [1, 0, 0, -1, 0, 500]; var svg = d3.select('body').append('svg') .attr('height', 500) .attr('width', 700); var grp = svg.append("g") .attr("transform", "matrix(" + amatrix + ")"); grp.append('polygon') .attr('points', "50,50 150,50 150,150 50,150") .attr('stroke', '#f00') .attr('fill', 'none'); // 给文本单独添加反向变换抵消父组的y轴反转 var textGroup = grp.append("g") .attr("transform", "matrix(1, 0, 0, -1, 0, 0)"); textGroup.append("text") .attr("font-size", 20) .attr("x", 100) .attr("y", -50) // 调整y值抵消变换带来的位置偏移 .attr("dy", "1.1em") .style("text-anchor", "start") .attr("id", 'txtid') .text('Hello');
原理说明:
- 父组的
matrix(1,0,0,-1,0,500)实现了y轴反转并向下平移500单位,确保多边形正确显示。 - 文本所在的子组添加
matrix(1,0,0,-1,0,0),再次反转y轴,抵消父组的翻转效果,让文本恢复正向。 - 将文本的
y值设为-50,是因为两次y轴反转后位置会偏移,调整后文本会回到原多边形的上方位置,保持布局一致。
内容的提问来源于stack exchange,提问作者Godson Dabre
相关产品推荐
相关产品推荐

