SVG内のリンクをクリックしたときに、外部ファイルのJavaScriptでSVG内の操作ができるかどうかを試してみました。
サンプルコード
fill属性の書き換えとheightのアニメーションでの変更を試してみました。
HTML
<svg width="700" height="300" viewBox="0 0 700 300"> <a xlink:href="" id="box1"> <rect width="100" height="100" x="100" y="100" fill="red" /> </a> <a xlink:href="" id="box2"> <rect width="100" height="100" x="300" y="100" fill="blue" /> </a> <a xlink:href="" id="box3"> <rect width="100" height="100" x="500" y="100" fill="green" id="box3-rect" /> </a> </svg>
JavaScript
$(function() { $('#box1').on('click', function(e) { $(this).children().attr('fill', 'black'); e.preventDefault(); }); $('#box2').on('click', function(e) { $(this).children().animate({ height: 200 }); e.preventDefault(); }); }); document.getElementById('box3').addEventListener('click', function(e) { var box3Rect = document.getElementById('box3-rect'); var timer = setInterval(function() { var box3RectH = parseFloat(box3Rect.getAttribute('height')); if(box3RectH < 200) { box3Rect.setAttribute('height', box3RectH + 1); } else { clearInterval(timer); } }, 3); e.preventDefault(); }, false);
jQueryのanimate()を使ってアニメーションさせた場合、heightが一旦0になってからアニメーションが開始されるようです。
setIntervalを使ってアニメーションさせた場合は問題なさそうでした。
SVGでアニメーションさせる場合、setIntervalを使って行うか、SVGのanimateタグあたりを使うのがよさそうです。
コメントが承認されるまで時間がかかります。