座標変換 transform について – translate について
transform属性の translate を試してみます。
以下のサンプルを用意しました。
[js]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
<style>
.params_box {
padding-bottom: 20px;
}
.range {
width: 400px;
}
</style>
</head>
<body>
<svg width="400" height="400" viewBox="0 0 400 400">
<path
id = "test_tran_dom1"
d = "M 20 20 A 20 20 0 0 1 100 100"
stroke = "#4f4f4f"
stroke-width = "1"
fill = "#cccccc"
transform = "translate(10, 10)"
/>
</svg>
<div>
<div class="params_box">
<span>パラメータ1</span>
<div><input type="range" class="range" id="range1" value="20" max="300"></div>
<span>x軸方向 :</span>
<span class="params" id="range1_value"></span>
</div>
<div class="params_box">
<span>パラメータ2</span>
<div><input type="range" class="range" id="range2" value="20" max="300"></div>
<span>y軸方向 :</span>
<span class="params" id="range2_value"></span>
</div>
</div>
<script>
// スライダの要素を取得し、イベントを付与する
let range1_dom = document.getElementById(‘range1’);
let range2_dom = document.getElementById(‘range2’);
// 各スライダーごとのイベントに、共通の関数を割り当てて処理する
range1_dom.addEventListener(‘input’, change_range_slider);
range2_dom.addEventListener(‘input’, change_range_slider);
// スライダーを動かし時の処理
function change_range_slider()
{
console.log("range1_dom.value -> " + range1_dom.value);
console.log("range2_dom.value -> " + range2_dom.value);
// DOMを取得する
let test_tran_dom1 = document.getElementById(‘test_tran_dom1’);
console.log("test_tran_dom1 -> " + test_tran_dom1);
// パラメータの値をリスト(配列)形式にして値を決定する
let param1_value = range1_dom.value;
let param2_value = range2_dom.value;
let set_param_value = param1_value + ","
+ param2_value + " ";
console.log("set_param_value -> " + set_param_value);
// SVG要素の x属性 を変更する
test_tran_dom1.setAttribute(‘transform’, ‘translate(‘ + set_param_value + ‘)’);
// 画面出力
let range1_value_dom = document.getElementById(‘range1_value’);
let range2_value_dom = document.getElementById(‘range2_value’);
range1_value_dom.innerHTML = range1_dom.value + ‘<br />’;
range2_value_dom.innerHTML = range2_dom.value + ‘<br />’;
}
</script>
</body>
</html>
[/js]
画面にアクセスすると、1つのDOMが出力されます。
また、パラメータが2つあり、それぞれを操作することで、svg画像に指定した translate の値の変化を見ることができます。