2016-05-26 11 views
0

私は少しのプロジェクトを行っています。その中で私は描いた楕円などの要素のサイズを変更する必要があります。私はExampleのようなmousemoveプロパティを追跡することによって楕円のサイズを変更できることを知っています。スケールプロパティを使用してsvg要素をサイズ変更する

function mouseMove(e) {} 

しかし、私たちは要素のサイズ変更のためtransfrom規模プロパティを使用する場合、それがどのように動作するかを知って好奇心旺盛です。私はこの中でw3.orgでいくつかのドキュメントを読んでいますlinkスケールのプロパティを適用する方法を理解することができません。

  1. 例を使ってマウスの動きを追跡することによって要素のサイズを変更するにはスケールとトランスフォームのプロパティを使用する方法を説明してください。ここで

答えて

1

行列に得ることなく、楕円 からマウスの現在の距離に基づいてサイズを変更する楕円を示す基本的な例である: https://jsfiddle.net/aaqs1wf0/ https://jsfiddle.net/aaqs1wf0/1/

SVG

<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 200 200" width="200px" height="200px"> 
    <ellipse cx="100" cy="100" rx="20" ry="10"/>  
</svg> 

のJavascript (センターの不必要な調整が含まれています。下のアップデートを参照)

(要求されたとして、私は scale()はまだうまくいくと思うものの、中央を設定する transform-originを使用し、 matrix()
var ellipse = document.getElementsByTagName("ellipse")[0]; 
var centerX = ellipse.getAttribute("cx"); 
var centerY = ellipse.getAttribute("cy"); 

window.addEventListener("mousemove", function(event) { 
    var x = event.clientX - centerX; // absolute distance from center 
    if (x<0) x = x * -1; 
    var y = event.clientY - centerY; 
    if (y<0) y = y * -1; 
    var scaleX = x/centerX; // proportional distance from center 
    var scaleY = y/centerY; 
    ellipse.setAttribute("cx", centerX/scaleX); // adjust the centers when adjusting scale so that it stays in one place. 
    ellipse.setAttribute("cy", centerY/scaleY); 
    ellipse.setAttribute("style","transform: scale(" + scaleX + ", " + scaleY + ")"); // scale the ellipse 
}); 

更新JS

var ellipse = document.getElementsByTagName("ellipse")[0]; 
var centerX = ellipse.getAttribute("cx"); 
var centerY = ellipse.getAttribute("cy"); 

window.addEventListener("mousemove", function(event) { 
    var x = event.clientX - centerX; // absolute distance from center 
    if (x<0) x = x * -1; 
    var y = event.clientY - centerY; 
    if (y<0) y = y * -1; 
    var scaleX = x/centerX; // proportional distance from center 
    var scaleY = y/centerY; 
    ellipse.setAttribute("style","transform: matrix(" + scaleX + ",0,0, " + scaleY + ",0,0); transform-origin: 100px 100px;"); // scale the ellipse 
}); 

基本的には、マウスの座標をとり、の座標と比較します楕円の中心を計算し、それを比例差に比例させます。 function mouseMove()(リンクのような)は組み込まれていませんが、mousemoveというイベントがあります。

+0

ありがとうございました。行列を使って上記と同じことをする方法を教えてください。あなたの助けを前にありがとう。 –

+1

これに答えるには、変換行列がどのように機能するか知っていなければなりません。 –

+1

今朝は行列のものを勉強していたので、行列を使う答えを更新しました(そして先日私を逃していた変態を中心にしている悪い方法を変えます)。 –

関連する問題