2016-05-13 72 views
1

我想旋轉一個容器與JavaScript和CSS屬性變換和變換原點,想法是圍繞某些座標旋轉它(例如捏手勢兩根手指之間的中心),我現在使用這個簡單的代碼(片段附加)來旋轉容器並使用onclick事件來捕獲錨點。只要不移動光標到容器上的不同位置,它就可以正常工作。當容器旋轉後改變點擊位置時會出現問題,預期的行爲是跟蹤轉換並開始爲新點旋轉,但現在容器正在進行奇怪的跳躍。我認爲需要將一些x,y翻譯添加到容器中,但我可以找出添加到容器的正確因素。保持旋轉容器上的變換和變換原點錨點

我不確定我是否已經很好地說明了預期的行爲,以確保這裏是一個例子:假設您在某個位置固定一個音符到曲面,然後開始旋轉音符,錨點。現在,稍稍旋轉音符後,您將銷釘(將音符保持在同一位置),然後將該銷釘放在音符上的不同位置,然後再使用該新的定位點旋轉。這是預期的行爲,希望我已經很好地解釋了自己。

這裏有一個片段可以更好地展示它,也可以在codepen上喝彩,歡呼聲。

http://codepen.io/vasilycrespo/pen/GZeYpB

var angle = 15, 
 
    scale = 1, 
 
    origin = { x: 0, y: 0}; 
 
    
 
var transform = function (e) { 
 
    var map = document.getElementById("map"); 
 
    angle += 15; 
 
    map.style.transformOrigin = e.pageX + "px " + e.pageY + "px"; 
 
    map.style.transform = "rotate("+angle+"deg) scale("+ scale +")"; 
 
};
.content{ 
 
    position: fixed; 
 
    top: 0px; 
 
    left: 0px; 
 
    margin-top:0; 
 
    margin-left:0; 
 
    background-color: #ccc; 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
.square{ 
 
    position: absolute; 
 
    width: 400px; 
 
    height: 400px; 
 
    background-image: url(http://www.pnas.org/site/misc/images/15-02545.500.jpg); 
 
    background-size: cover; 
 
}
<div class="content" onclick="transform(event)"> 
 
    <div class="square" id="map"></div> 
 
</div>

+0

事情是,轉換原點設置從你的標籤的流量中的原始位置,而不是從它在屏幕上重繪的位置:( –

回答

0

的問題是,你每次點擊時,格根據您單擊的位置改變位置。第一次點擊後,您應該保存e.pageXe.pageY,並在下次點擊時應使用保存的值。您可以將您的transform功能更改爲:

var transform = (function() { 
    var pageX, pageY; 
    return function(e) { 
    if (typeof pageX === "undefined") { 
     pageX = e.pageX 
     pageY = e.pageY 
    } 
    var map = document.getElementById("map"), xr; 
    angle += 15; 
    map.style.transformOrigin = pageX + "px " + pageY + "px"; 
    map.style.transform = "rotate("+angle+"deg) scale("+ scale +")"; 
    } 
}()) 

請參閱updated Code Pen

+0

謝謝,但這不是預期的行爲,我的意思是,一旦你改變了定位點,旋轉應該像新的點那樣保持不變,就像「釘一個筆記的例子」一樣,你的方法是不同的,儘管光標位置改變了,你仍然保持原始的點擊點,也許我解釋了自己的錯誤方式嘿嘿,有點棘手來表達預期的行爲 –

+0

@VasilyCrespo它不是已經這樣工作嗎? –

+0

沒有,幾乎,但正在做一些奇怪的跳轉到新的錨點,例如,在我的實現,點擊兩次在 大象的眼睛沒有移動光標遠離容器轉動一點...然後改變你的銅rsor到別的地方,可以說 大象樹幹尖端,想法是保持樹幹尖端爲中心點並保持旋轉。隨着跳躍,行李箱端部的位置丟失。現在我試圖根據旋轉圖像的偏移頂部和左側添加一些左側和頂部來修復中心點,但是沒有成功。 –