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の指定は、上記の仕様で動作することがわかります。