SVGについて – テキストについて(3)
テキストのtransform属性のrotateについて
前回のサンプルの rotate の値は、単一の値を指定して、各文字列の角度を指定しました。
今回は、指定する角度を配列形式のリストで指定してみます。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テストHTML</title> <style> .params_box { padding-top: 30px; } #transform { width: 200px; } </style> </head> <body> <svg width="200" height="200" viewBox="0 0 200 200"> <text id="test_text1" x="50" y="50" dx="0" dy="0" transform="rotate(0, 20,40)" > テキストのテスト </text> </svg> <div> <div class="params_box"> <span class="param_title">パラメータ1</span> <div><input type="range" id="transform1" value="0" max="360"></div> <span>transform (rotate) :</span> <span class="params" id="transform1_value"></span> </div> <div class="params_box"> <span class="param_title">パラメータ2</span> <div><input type="range" id="transform2" value="0" max="360"></div> <span>transform (rotate) :</span> <span class="params" id="transform2_value"></span> </div> <div class="params_box"> <span class="param_title">パラメータ3</span> <div><input type="range" id="transform3" value="0" max="360"></div> <span>transform (rotate) :</span> <span class="params" id="transform3_value"></span> </div> <div class="params_box"> <span class="param_title">パラメータ4</span> <div><input type="range" id="transform4" value="0" max="360"></div> <span>transform (rotate) :</span> <span class="params" id="transform4_value"></span> </div> <div class="params_box"> <span class="param_title">パラメータ5</span> <div><input type="range" id="transform5" value="0" max="360"></div> <span>transform (rotate) :</span> <span class="params" id="transform5_value"></span> </div> </div> <script> // スライダtransform1の要素を取得し、イベントを付与する let transform1_dom = document.getElementById('transform1'); transform1_dom.addEventListener('input', function(e) { console.log("transform1_dom.value -> " + transform1_dom.value); console.log("transform2_dom.value -> " + transform2_dom.value); console.log("transform3_dom.value -> " + transform3_dom.value); console.log("transform4_dom.value -> " + transform4_dom.value); console.log("transform5_dom.value -> " + transform5_dom.value); // パターン内のDOM情報を取得する let test_text1_dom = document.getElementById('test_text1'); console.log("test_text1_dom -> " + test_text1_dom); // パラメータ1~パラメータ5まで値をリスト(配列)形式にして角度を決定する let rotate_value = transform1_dom.value + ',' + transform2_dom.value + ',' + transform3_dom.value + ',' + transform4_dom.value + ',' + transform5_dom.value; // SVG要素のtransform1属性を変更する test_text1_dom.setAttribute('rotate', rotate_value); // 画面出力 let transform1_value_dom = document.getElementById('transform1_value'); transform1_value_dom.innerHTML = transform1_dom.value + '<br />'; }); // スライダtransform2の要素を取得し、イベントを付与する let transform2_dom = document.getElementById('transform2'); transform2_dom.addEventListener('input', function(e) { console.log("transform1_dom.value -> " + transform1_dom.value); console.log("transform2_dom.value -> " + transform2_dom.value); console.log("transform3_dom.value -> " + transform3_dom.value); console.log("transform4_dom.value -> " + transform4_dom.value); console.log("transform5_dom.value -> " + transform5_dom.value); // パターン内のDOM情報を取得する let test_text1_dom = document.getElementById('test_text1'); console.log("test_text1_dom -> " + test_text1_dom); // パラメータ1~パラメータ5まで値をリスト(配列)形式にして角度を決定する let rotate_value = transform1_dom.value + ',' + transform2_dom.value + ',' + transform3_dom.value + ',' + transform4_dom.value + ',' + transform5_dom.value; // SVG要素のtransform2属性を変更する test_text1_dom.setAttribute('rotate', rotate_value); // 画面出力 let transform2_value_dom = document.getElementById('transform2_value'); transform2_value_dom.innerHTML = transform2_dom.value + '<br />'; }); // スライダtransform3の要素を取得し、イベントを付与する let transform3_dom = document.getElementById('transform3'); transform3_dom.addEventListener('input', function(e) { console.log("transform1_dom.value -> " + transform1_dom.value); console.log("transform2_dom.value -> " + transform2_dom.value); console.log("transform3_dom.value -> " + transform3_dom.value); console.log("transform4_dom.value -> " + transform4_dom.value); console.log("transform5_dom.value -> " + transform5_dom.value); // パターン内のDOM情報を取得する let test_text1_dom = document.getElementById('test_text1'); console.log("test_text1_dom -> " + test_text1_dom); // パラメータ1~パラメータ5まで値をリスト(配列)形式にして角度を決定する let rotate_value = transform1_dom.value + ',' + transform2_dom.value + ',' + transform3_dom.value + ',' + transform4_dom.value + ',' + transform5_dom.value; // SVG要素のtransform3属性を変更する test_text1_dom.setAttribute('rotate', rotate_value); // 画面出力 let transform3_value_dom = document.getElementById('transform3_value'); transform3_value_dom.innerHTML = transform3_dom.value + '<br />'; }); // スライダtransform4の要素を取得し、イベントを付与する let transform4_dom = document.getElementById('transform4'); transform4_dom.addEventListener('input', function(e) { console.log("transform1_dom.value -> " + transform1_dom.value); console.log("transform2_dom.value -> " + transform2_dom.value); console.log("transform3_dom.value -> " + transform3_dom.value); console.log("transform4_dom.value -> " + transform4_dom.value); console.log("transform5_dom.value -> " + transform5_dom.value); // パターン内のDOM情報を取得する let test_text1_dom = document.getElementById('test_text1'); console.log("test_text1_dom -> " + test_text1_dom); // パラメータ1~パラメータ5まで値をリスト(配列)形式にして角度を決定する let rotate_value = transform1_dom.value + ',' + transform2_dom.value + ',' + transform3_dom.value + ',' + transform4_dom.value + ',' + transform5_dom.value; // SVG要素のtransform4属性を変更する test_text1_dom.setAttribute('rotate', rotate_value); // 画面出力 let transform4_value_dom = document.getElementById('transform4_value'); transform4_value_dom.innerHTML = transform4_dom.value + '<br />'; }); // スライダtransform5の要素を取得し、イベントを付与する let transform5_dom = document.getElementById('transform5'); transform5_dom.addEventListener('input', function(e) { console.log("transform1_dom.value -> " + transform1_dom.value); console.log("transform2_dom.value -> " + transform2_dom.value); console.log("transform3_dom.value -> " + transform3_dom.value); console.log("transform4_dom.value -> " + transform4_dom.value); console.log("transform5_dom.value -> " + transform5_dom.value); // パターン内のDOM情報を取得する let test_text1_dom = document.getElementById('test_text1'); console.log("test_text1_dom -> " + test_text1_dom); // パラメータ1~パラメータ5まで値をリスト(配列)形式にして角度を決定する let rotate_value = transform1_dom.value + ',' + transform2_dom.value + ',' + transform3_dom.value + ',' + transform4_dom.value + ',' + transform5_dom.value; // SVG要素のtransform5属性を変更する test_text1_dom.setAttribute('rotate', rotate_value); // 画面出力 let transform5_value_dom = document.getElementById('transform5_value'); transform5_value_dom.innerHTML = transform5_dom.value + '<br />'; }); </script> </body> </html>
画面にアクセスすると、「テキストのテスト」という文字列が表示されます。
スライダーは1から5まであり、1、2、3、4までのスライダを動かすと、それぞれ
1文字目、2文字目、3文字目、4文字目までの各文字が角度指定されて回転します。
ただ、スライダの5番目だけは挙動が異なり、5文字目以降の「のテスト」全体に効果がかかります。
このことから、setAttributeのrotateの指定は、上記の仕様で動作することがわかります。