クリッピング マスキング について(その4) – 文字列でのクリッピングパス
クリッピングパスその4はクリッピングされる対象(本サンプルでは画像)のDOM要素を、
文字列でクリッピングするサンプルを試してみます。
クリッピングされる対象と、クリッピングする対象の関係はこれまでのサンプルと同様で、
クリッピングする要素が text 要素で指定されているという違いのみになります。
下記のサンプルを用意しました。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テストHTML</title> <style> .params_box { font-size : 0.8em; padding-bottom: 10px; } .range { width: 400px; } .code_view { font-size : 0.8em; padding: 5px; background-color: #000000; color: #ffffff; } #code_view1, #code_view2, #code_view3 { color: #ff0000; } </style> </head> <body> <svg width="500" height="250" viewBox="0 0 500 250"> <defs> <clipPath id="test_clip_dom1"> <text id="test_clip_path1" x="30" y="70" font-size="50" font-weight="bold" >enaga</text> </clipPath> </defs> <image href="./sima.jpg" clip-path="url(#test_clip_dom1)" width="400" height="226"/> </svg> <div> <div class="params_box"> <span>param1 : </span><span class="params" id="range1_value"></span> <div><input type="range" class="range" id="range1" value="40" max="500"></div> </div> <div class="params_box"> <span>param2 : <span class="params" id="range2_value"></span></span> <div><input type="range" class="range" id="range2" value="140" max="500"></div> </div> <div class="params_box"> <span>param3 : <span class="params" id="range3_value"></span></span> <div><input type="range" class="range" id="range3" value="100" max="500"></div> </div> </div> <div class="code_view"> <clipPath id="test_clip_dom1"><br /> <text<br /> id="test_clip_path1"<br /> x = "<span id="code_view1"></span>"<br /> y = "<span id="code_view2"></span>"<br /> font-size ="<span id="code_view3"></span>"<br /> /><br /> </clipPath><br /> </div> <script> // スライダの要素を取得し、イベントを付与する let range1_dom = document.getElementById('range1'); let range2_dom = document.getElementById('range2'); let range3_dom = document.getElementById('range3'); // 各スライダーごとのイベントに、共通の関数を割り当てて処理する range1_dom.addEventListener('input', change_range_slider); range2_dom.addEventListener('input', change_range_slider); range3_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); console.log("range3_dom.value -> " + range3_dom.value); // クリップする側の要素を取得する let test_clip_path1 = document.getElementById('test_clip_path1'); console.log("test_clip_path1 -> " + test_clip_path1); // SVG要素の x y font の値を設定する test_clip_path1.setAttribute('x' , range1_dom.value); test_clip_path1.setAttribute('y' , range2_dom.value); test_clip_path1.setAttribute('font-size', range3_dom.value); // パラメータ値を出力 let range1_value_dom = document.getElementById('range1_value'); let range2_value_dom = document.getElementById('range2_value'); let range3_value_dom = document.getElementById('range3_value'); range1_value_dom.innerHTML = range1_dom.value; range2_value_dom.innerHTML = range2_dom.value; range3_value_dom.innerHTML = range3_dom.value; // DOM要素 「id="test_clip_path1" 」の 各パラメータを動的に出力する let code_view1_dom = document.getElementById('code_view1'); let code_view2_dom = document.getElementById('code_view2'); let code_view3_dom = document.getElementById('code_view3'); code_view1_dom.innerHTML = range1_dom.value; code_view2_dom.innerHTML = range2_dom.value; code_view3_dom.innerHTML = range3_dom.value; } </script> </body> </html>
画面にアクセスすると、テキスト要素の位置、サイズにより、元画像がクリッピングされることがわかります。
下記のキャプチャ例は、スライダーを調整した一例です。