首先,你需要旋轉的原點設置爲左上角和旋轉,
$("#child").css({
"-webkit-transform-origin": "top left",
"-moz-transform-origin": "top left",
"-o-transform-origin": "top left",
"transform-origin": "top left",
"transform" : "rotate("+ angle +"deg)"
});
這將繞其元素(頂部,左側)點。
但正如你在你的案例中所描述的那樣,你需要div始終處於頂端,而你需要用div的邊界做一些數學運算。
您可以使用document.getElementById(ele).getBoundingClientRect();
然後你需要前,它被旋轉後得到div的邊界得到的邊界。根據當前角度應用數學邏輯。在這裏找到代碼供您參考。
$(function(){
$("#child").draggable();
var angle = 0;
$("#btn1").click(function(){
angle = angle + 90;
if(angle == 360) { angle = 0 }
// reset top left position to (0,0)
$("#child").css({"top": "0px", "left": "0px"});
var preBounds = getBounds("child");
$("#child").css({
"-webkit-transform-origin": "top left",
"-moz-transform-origin": "top left",
"-o-transform-origin": "top left",
"transform-origin": "top left",
"transform" : "rotate("+ angle +"deg)"
});
var currBounds = getBounds("child");
if(angle == 90)
{
$("#child").css({ "left": currBounds.left+Number(preBounds.left-currBounds.left)+"px"});
}
else if(angle == 180)
{
$("#child").css({ "top": currBounds.top+Number(preBounds.top-currBounds.top)+"px","left":currBounds.width+"px"});
}
else if(angle == 270)
{
$("#child").css({ "top": currBounds.height+"px"});
}
});
});
function getBounds(ele){
var bounds = document.getElementById(ele).getBoundingClientRect();
console.log(bounds);
//{left:bounds.left, top:bounds.top, right:bounds.right, bottom:bounds.bottom}
return bounds;
}
檢查相同的fiddle。希望它有幫助
當您旋轉時,您是否試圖始終將父母的左上角保留在父母的左上角? –