С трудом справляясь с преобразованием поворота, у меня есть таблица, которая вращается, для целей скрипки я отключил одно место.
Я создам новые фоновые изображения для каждой таблицы, я будет иметь 4 таблицы, одна будет таблицей 4, таблицей 3, таблицей 2 и таблицей 1.
Это будет один div с фоновым изображением, но пользователи смогут вращаться стол, пока они не получат его так, как они хотят.
Лучшее объяснение будет в этой скрипке.
$(document).ready(function()
{
var angle = [0, 90, 180, 270];
var current = 0;
$(document).on('click','.table > .rotateright',function(event)
{
var d = $(this).parents('.table').attr('degrees');
d = parseInt(d);
current = angle.indexOf(d);
current++;
if(current == 4)
{
current = 0;
}
var r = $(this).parents('.table').attr('table');
$(this).parents('.table').attr('degrees', angle[current]);
var rotatetable = '.'.concat(r, "background");
$(rotatetable).css({
'-webkit-transform' : 'rotate(' + angle[current] + 'deg)',
'-moz-transform' : 'rotate(' + angle[current] + 'deg)',
'-ms-transform' : 'rotate(' + angle[current] + 'deg)',
'-o-transform' : 'rotate(' + angle[current] + 'deg)',
'transform' : 'rotate(' + angle[current] + 'deg)'
});
});
$(document).on('click','.table > .rotateleft',function(event)
{
var d = $(this).parents('.table').attr('degrees');
d = parseInt(d);
current = angle.indexOf(d);
current--;
if(current == -1)
{
current = 3;
}
var r = $(this).parents('.table').attr('table');
$(this).parents('.table').attr('degrees', angle[current]);
var rotatetable = '.'.concat(r, "background");
$(rotatetable).css({
'-webkit-transform' : 'rotate(' + angle[current] + 'deg)',
'-moz-transform' : 'rotate(' + angle[current] + 'deg)',
'-ms-transform' : 'rotate(' + angle[current] + 'deg)',
'-o-transform' : 'rotate(' + angle[current] + 'deg)',
'transform' : 'rotate(' + angle[current] + 'deg)'
});
});
});
.person
{
z-index:1000;
font-size: 11px;
cursor:default;
text-align: left;
line-height: 10px;
color: #3A3AB1;
font-weight: bold;
margin-bottom: 8px;
width: 25px;
overflow: visible;
}
.person img
{
padding-right:5px;
margin-bottom:10px;
cursor: pointer;
height:28px;
z-index: 900;
}
.chair span {
position: absolute;
left: -29%;
top: 27px;
width: 42px;
background-color: rgba(255, 255, 255, 0.43);
text-align: center;
}
.chair {
position: absolute;
overflow: visible;
width: 28px;
margin: 0px;
list-style-type: none;
left: 11px;
top: 12px;
height: 33px;
text-align: center;
z-index: 3;
}
.rotateright {
position: absolute;
width: 16px;
height: 16px !important;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
bottom: 0px;
right: -4px;
z-index: 3;
}
.rotateleft {
position: absolute;
width: 16px;
height: 16px !important;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
bottom: 0px;
left: 0px;
z-index: 3;
}
.editdiv {
position: absolute;
width: 16px;
height: 16px !important;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
top: 0px;
right: -4px;
color: black;
font-weight: bold;
z-index: 3;
}
.square4background {
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center center;
background-image: url(https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/square4.png);
}
.square4 {
cursor: move;
width: 133px;
height: 133px;
position: absolute !important;
font-size: 17px;
font-weight: bold;
color: #00f;
border: 1px solid #ccc;
border-radius: 6%;
-moz-border-radius: 6%;
-webkit-border-radius: 6%;
}
.square41
{
top: 5px;
left: 58px;
}
.square42
{
top: 51px;
left: 102px;
}
.square43
{
top: 96px;
left: 58px;
background-color:black;
}
.square44
{
top: 51px;
left: 13px;
}
<head>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<div id="table1" class="table square4 ui-draggable ui-draggable-handle" +="" table="square4" degrees="0">
<div class="removet"></div>
<div class="background square4background" style="transform: rotate(0deg);">
<div id="square41" class="chair connect_lists square4child square41 ui-sortable" style="transform: rotate(0deg);">
<div id="8" class="person" title="hello hello">
<img src="https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/woman.png" title="hello hello">
<span>hello</span>
</div>
</div>
<div id="square42" class="chair connect_lists square4child square42 ui-sortable" style="transform: rotate(0deg);">
<div id="6" class="person" title="test test">
<img src="https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/woman.png" title="test test">
<span>test</span>
</div>
</div>
<div id="square43" class="chair connect_lists square4child square43 ui-sortable" style="transform: rotate(0deg);"></div>
<div id="square44" class="chair connect_lists square4child square44 ui-sortable" style="transform: rotate(0deg);">
<div id="2" class="person" title="Fiona Johnson">
<img src="https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/bride.png" title="Fiona Johnson">
<span>Fiona</span>
</div>
</div>
</div>
<span class="fa fa-edit editdiv"></span>
<span class="fa fa-rotate-left rotateleft"></span>
<span class="fa fa-rotate-right rotateright"></span>
</div>
https://jsfiddle.net/jeu69kgo/1/
Когда вы нажимаете правую кнопку поворота, родитель поворачивается и принимает детей с ним, что я и хочу, но изображение людей искажается из-за поворота, вы можете увидеть его в скрипке.
Поворот 90:
До поворота
После поворота
Обратите внимание, как изображение поворачивается вместе с родителем .
Я пытался противодействовать этому с помощью -ротации на детей, у меня есть скрипка с кодом здесь.
$(document).ready(function()
{
var angle = [0, 90, 180, 270];
var current = 0;
$(document).on('click','.table > .rotateright',function(event)
{
var d = $(this).parents('.table').attr('degrees');
d = parseInt(d);
current = angle.indexOf(d);
current++;
if(current == 4)
{
current = 0;
}
var r = $(this).parents('.table').attr('table');
$(this).parents('.table').attr('degrees', angle[current]);
var rotatetable = '.'.concat(r, "background");
$(rotatetable).css({
'-webkit-transform' : 'rotate(' + angle[current] + 'deg)',
'-moz-transform' : 'rotate(' + angle[current] + 'deg)',
'-ms-transform' : 'rotate(' + angle[current] + 'deg)',
'-o-transform' : 'rotate(' + angle[current] + 'deg)',
'transform' : 'rotate(' + angle[current] + 'deg)'
});
$(this).parents('.table').find(".person").css({'-webkit-transform' : 'rotate(' + angle[current] + 'deg)',
'-moz-transform' : 'rotate(-' + angle[current] + 'deg)',
'-ms-transform' : 'rotate(-' + angle[current] + 'deg)',
'-o-transform' : 'rotate(-' + angle[current] + 'deg)',
'transform' : 'rotate(-' + angle[current] + 'deg)'});
});
$(document).on('click','.table > .rotateleft',function(event)
{
var d = $(this).parents('.table').attr('degrees');
d = parseInt(d);
current = angle.indexOf(d);
current--;
if(current == -1)
{
current = 3;
}
var r = $(this).parents('.table').attr('table');
$(this).parents('.table').attr('degrees', angle[current]);
var rotatetable = '.'.concat(r, "background");
$(rotatetable).css({
'-webkit-transform' : 'rotate(' + angle[current] + 'deg)',
'-moz-transform' : 'rotate(' + angle[current] + 'deg)',
'-ms-transform' : 'rotate(' + angle[current] + 'deg)',
'-o-transform' : 'rotate(' + angle[current] + 'deg)',
'transform' : 'rotate(' + angle[current] + 'deg)'
});
$(this).parents('.table').find(".person").css({'-webkit-transform' : 'rotate(' + angle[current] + 'deg)',
'-moz-transform' : 'rotate(+' + angle[current] + 'deg)',
'-ms-transform' : 'rotate(+' + angle[current] + 'deg)',
'-o-transform' : 'rotate(+' + angle[current] + 'deg)',
'transform' : 'rotate(+' + angle[current] + 'deg)'});
});
});
.person
{
z-index:1000;
font-size: 11px;
cursor:default;
text-align: left;
line-height: 10px;
color: #3A3AB1;
font-weight: bold;
margin-bottom: 8px;
width: 25px;
overflow: visible;
}
.person img
{
padding-right:5px;
margin-bottom:10px;
cursor: pointer;
height:28px;
z-index: 900;
}
.chair span {
position: absolute;
left: -29%;
top: 27px;
width: 42px;
background-color: rgba(255, 255, 255, 0.43);
text-align: center;
}
.chair {
position: absolute;
overflow: visible;
width: 28px;
margin: 0px;
list-style-type: none;
left: 11px;
top: 12px;
height: 33px;
text-align: center;
z-index: 3;
}
.rotateright {
position: absolute;
width: 16px;
height: 16px !important;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
bottom: 0px;
right: -4px;
z-index: 3;
}
.rotateleft {
position: absolute;
width: 16px;
height: 16px !important;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
bottom: 0px;
left: 0px;
z-index: 3;
}
.editdiv {
position: absolute;
width: 16px;
height: 16px !important;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
top: 0px;
right: -4px;
color: black;
font-weight: bold;
z-index: 3;
}
.square4background {
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center center;
background-image: url(https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/square4.png);
}
.square4 {
cursor: move;
width: 133px;
height: 133px;
position: absolute !important;
font-size: 17px;
font-weight: bold;
color: #00f;
border: 1px solid #ccc;
border-radius: 6%;
-moz-border-radius: 6%;
-webkit-border-radius: 6%;
}
.square41
{
top: 5px;
left: 58px;
}
.square42
{
top: 51px;
left: 102px;
}
.square43
{
top: 96px;
left: 58px;
background-color:black;
}
.square44
{
top: 51px;
left: 13px;
}
<head>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<div id="table1" class="table square4 ui-draggable ui-draggable-handle" +="" table="square4" degrees="0">
<div class="removet"></div>
<div class="background square4background" style="transform: rotate(0deg);">
<div id="square41" class="chair connect_lists square4child square41 ui-sortable" style="transform: rotate(0deg);">
<div id="8" class="person" title="hello hello">
<img src="https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/woman.png" title="hello hello">
<span>hello</span>
</div>
</div>
<div id="square42" class="chair connect_lists square4child square42 ui-sortable" style="transform: rotate(0deg);">
<div id="6" class="person" title="test test">
<img src="https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/woman.png" title="test test">
<span>test</span>
</div>
</div>
<div id="square43" class="chair connect_lists square4child square43 ui-sortable" style="transform: rotate(0deg);"></div>
<div id="square44" class="chair connect_lists square4child square44 ui-sortable" style="transform: rotate(0deg);">
<div id="2" class="person" title="Fiona Johnson">
<img src="https://www.weddly.app/wp-content/themes/Stiles%20Media/assets/images/bride.png" title="Fiona Johnson">
<span>Fiona</span>
</div>
</div>
</div>
<span class="fa fa-edit editdiv"></span>
<span class="fa fa-rotate-left rotateleft"></span>
<span class="fa fa-rotate-right rotateright"></span>
</div>
https://jsfiddle.net/jd08wvgo/2/
Это работает хорошо, однако человек немного изменился теперь больше не на сиденье, как показано на рисунке, как я могу сохранить div в том же положении, в каком оно было до его поворота, но все еще вращаться вместе с родителем и не двигаться немного при каждом повороте.