2017-03-18 11 views
2

私は4つの辺のいずれかと4つの隅のいずれかによってサイズ変更可能なオブジェクトを持っています。回転オブジェクトのサイズを変更した後、左上の位置を更新するにはどうすればよいですか?

私は回転可能にしようとしていますが、アンカーがオブジェクトの中心になるようにCSSプロパティtranslate: rotate(angle)を使っています。

オブジェクトには、top、left、width、height、angleの各プロパティがあります。

問題が発生するのは、一度回転させると、たとえば右下隅からサイズを変更する必要がある場合、センターアンカーポイントを維持したまま左上の位置を維持しないということです。

おそらくいくつかの三角法を使って、左上の位置を更新する方法を見つける必要があります。

document.getElementById("button").addEventListener("click", function() { 
 
    var obj = document.getElementById("object"); 
 

 
    console.log(obj.style.top, obj.style.left); // 100, 100 
 

 
    obj.style.width = "200px"; 
 
    obj.style.height = "200px"; 
 

 
    // Something needs to be done here to update the top left position and keep it in place 
 

 
});
div { 
 
    position: absolute; 
 
    top: 100px; 
 
    left: 100px; 
 
    width: 50px; 
 
    height: 50px; 
 
    background: red; 
 
    transform-origin: 50% 50%; 
 
    transform: rotate(20deg); 
 
}
<div id="object"></div> 
 
<button id="button">Resize bottom-right corner</button>

私はフィドルhere

+0

私は、ボタンをクリックした後に現れるものについてもっと気にします。 –

+0

これは、問題を示すサンプルコードです。実際のコードはReactで書かれており、ここに入れるにはあまりにも多くの依存関係があります。 –

答えて

0

を持っている私はあなたがそれを所定の位置にとどまる作ろうとしていると仮定し、これだけ追加します。

obj.style.left = "25px"; 
obj.style.top = "25px"; 

高さと幅を設定した後。 ポジションを取得するには、サイズを50〜200ピクセル(4倍増)にしていたのを見たので、元のx/yの4分の1にして「同じ」位置に配置しました。

希望すると便利です。 (codepen:http://codepen.io/JohnJ1101/pen/wJpJqE

+0

それほど単純ではありません。私は左上隅が正しい位置にとどまるようにしたいので、右下隅を引っ張るだけでなく、逆方向または他の方向に引っ張っても、新しい上および左の位置を維持するための式が必要です方向。 –

+0

ok、作業中 – JohnJ1101

+0

transform-originを0%に設定してみてください0% – JohnJ1101

関連する問題