古いバージョンのsafariなどで、動かないことがある。
Built with blockbuilder.org
古いバージョンのsafariなどで、動かないことがある。
Built with blockbuilder.org
| <!DOCTYPE html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title>SVG textで改行</title> | |
| <style> | |
| body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; } | |
| svg { width: 100%; height: 100%; } | |
| </style> | |
| </head> | |
| <body> | |
| <svg></svg> | |
| <script src="//unpkg.com/babel-standalone@6.26.0/babel.min.js"></script> | |
| <script src="//unpkg.com/d3@4.12.2/build/d3.min.js"></script> | |
| <script type="text/babel"> | |
| const textArray = ["1行目、あ","2行目", "3行目あああああ", "4行目あ"] | |
| const svg = d3.select("svg"); | |
| svg .append("text") | |
| .attr("transform", "translate(100, 100)") | |
| .html(leftLinebreak(textArray)) | |
| svg .append("text") | |
| .attr("transform", "translate(100, 200)") | |
| .html(rightLinebreak(textArray)) | |
| svg .append("text") | |
| .attr("transform", "translate(100, 300)") | |
| .html(centerLinebreak(textArray)) | |
| function leftLinebreak(array){ | |
| let string = ""; | |
| array.forEach((t, i) =>{ | |
| string += `<tspan y="${i}em" x="0em">${t}</tspan>`; | |
| }); | |
| return string; | |
| } | |
| function rightLinebreak(array){ | |
| let string = ""; | |
| const maxTextLength = d3.max(array, d => d.length ) | |
| array.forEach((t, i) => { | |
| let l = maxTextLength - t.length ; | |
| string += `<tspan y="${i}em" x="${l}em">${t}</tspan>`; | |
| }); | |
| return string; | |
| } | |
| function centerLinebreak(array){ | |
| let string = ""; | |
| const maxTextLength = d3.max(array, d => d.length ) | |
| array.forEach((t, i) => { | |
| let l = (maxTextLength - t.length) /2; | |
| string += `<tspan y="${i}em" x="${l}em">${t}</tspan>`; | |
| }); | |
| return string | |
| } | |
| </script> | |
| </body> |