d3.js 发表于 2018-01-01 矩形12345678910111213141516171819202122232425262728g .append("rect") .attr("class", "rect") .attr("width", 100) .attr("height", 100) .attr("stroke", "#000") .attr("fill", "#eee") // x, y 起点位置 .attr('x', (d, i) => { // d 是元素本身 return d; }) .attr('y', (d, i) => { return d; }) // 圆角 .attr('rx', 4) .attr('ry', 4) // 旋转 .attr('transform', "translate(" + -65 + "," + -20 + ")")// attr 属性的数值可以通过函数 return .attr('width', (d) => { const width = d.length * 18; return width; })// 颜色可以使用 rgba .attr('stroke', 'rgba(181, 181, 181, 0.75)') 圆形123456789101112g.append('circle') // 圆的半径 .attr('r', '5') // cx, cy 位置 .attr('cx', (d, i) => { return d; }) .attr('cy', (d, i) => { return d; }) .style('fill', '#1890ff') .attr('cursor', 'pointer') 文字12345678910111213g.append('text') .text('显示的文字') .attr('dy', '2em') .attr('dx', '1.2em') .attr('fill', '#fff') .attr("font-size", "18px") .attr('x', (d, i) => { return d; }) .attr('y', (d, i) => { return d; }) .style("font-family", fontfamily); 封装文本自动换行123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475// 参数appendMultiText( container, //文本的容器,可以是<svg>或<g> str, //字符串 posX, //文本的x坐标 posY, //文本的y坐标 width, //每一行的宽度,单位为像素 fontsize, //文字的大小(可省略),默认为 14 fontfamily //文字的字体(可省略),默认为 simsun, arial)// 使用 rectTextG .append('text') .text(function (d,i) { if(d.data.name.length >= 6) { appendMultiText(d3.select(rectTextG._groups[0][i]), d.data.name, -58, -18, 104,14); return ''; } return d.data.name; });function appendMultiText(container, str, posX, posY, width, fontsize, fontfamily){ if( arguments.length < 6){ fontsize = 14; } if( arguments.length < 7){ fontfamily = "simsun, arial"; } // var strs = splitByLine(str,width,fontsize); var mulText = container.append("text") .attr("x",posX) .attr("y",posY) .style("font-size",fontsize) .style("font-family",fontfamily); mulText.selectAll("tspan") .data(strs) .enter() .append("tspan") .attr("x",mulText.attr("x")) .attr("dy","1em") .text(function(d){ return d; }); return mulText; function splitByLine(str,max,fontsize){ var curLen = 0; var result = []; var start = 0, end = 0; for(var i=0;i<str.length;i++){ var code = str.charCodeAt(i); var pixelLen = code > 255 ? fontsize : fontsize/2; curLen += pixelLen; if(curLen > max){ end = i; result.push(str.substring(start,end)); start = i; curLen = pixelLen; } if( i === str.length - 1 ){ end = i; result.push(str.substring(start,end+1)); } } return result; }} 重新刷新视图1234// 清空 SVG 中的内容,重新绘制d3.select('#svgID') .selectAll('*') .remove(); 本文结束,感谢您的阅读 打赏 微信支付 支付宝