Мне нужна кнопка для сброса положения перетаскиваемых элементов до исходного положения в следующей скрипте. поиграйте здесь https://jsfiddle.net/adgram/714w6x3t/20/
$(document).ready(function() {
$('.event').on("dragstart", function(event) {
var dt = event.originalEvent.dataTransfer;
dt.setData('Text', $(this).attr('id'));
});
$('table td').on("dragenter dragover drop", function(event) {
event.preventDefault();
if (event.type === 'drop') {
var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
if ($(this).find('span').length === 0) {
de = $('#' + data).detach();
de.appendTo($(this));
//alert("ok"); //mine
document.getElementById("done").innerHTML = data + " moved!";
}
};
});
})
table th,
table td {
height: 30px;
width: 200px;
}
table span {
display: block;
background-color: #09C;
height: 100%;
width: 100%;
}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv = "content-type" content = "text/html; charset=UTF-8">
<title></title>
<meta http-equiv = "content-type" content = "text/html; charset=UTF-8">
<meta name = "robots" content = "noindex, nofollow">
<meta name = "googlebot" content = "noindex, nofollow">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<script type = "text/javascript" src = "//code.jquery.com/jquery-3.7.1.js"></script>
</head>
<body>
<div>
<div id = "done" style = " text-align: center;color:red;"></div>
<table id = "#our_table" border = "1">
<tr>
<th>Jun 1</th>
<th>Jun 2</th>
<th>Jun 3</th>
<th>Jun 4</th>
<th>Jun 5</th>
</tr>
<tr>
<td><span class = "event" id = "a" draggable = "true">aaa</span></td>
<td><span class = "event" id = "b" draggable = "true">bbb</span></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><span class = "event" id = "c" draggable = "true">ccc</span></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><span class = "event" id = "d" draggable = "true">dddd</span></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><span class = "event" id = "e" draggable = "true">eeee</span></td>
<td></td>
<td></td>
<td></td>
<td><span class = "event" id = "f" draggable = "true">ffff</span></td>
</tr>
<tr>
<td><span class = "event" id = "g" draggable = "true">gggg</span></td>
<td></td>
<td></td>
<td><span class = "event" id = "h" draggable = "true">hhhh</span></td>
<td></td>
</tr>
</table>
</div>
<input class = "resetall" type = "submit" id = "reset" value = "reset">
original https://jsfiddle.net/videma/2RuBh/
</body>
</html>
поиграйте здесь https://jsfiddle.net/adgram/714w6x3t/20/ Если параметр перетаскивание имеет значение true, ячейка может перемещаться. Я попробовал, должно ли перетаскивание вернуться, но не работает. кто-нибудь может помочь, мне не нужно сбрасывать все элементы. Поскольку моя программа, когда я делаю первый сброс, запускает код, мне нужен только первый шаг для сброса.
Я бы сказал, что вам нужно сохранить историю или, в вашем случае, начальные позиции для каждого перетаскиваемого объекта, потому что в начальной позиции того, который вы хотите сбросить, уже может быть другой перетаскиваемый объект, который вы также должны сбросить тогда. ?
Когда вы перетаскиваете, вы меняете не положение, а структуру HTML. Так что сохраните html и восстановите его самостоятельно. Что-то вроде этого:
$(document).ready(function () {
const originTable = $('#our_table').html();
$(document).on('dragstart', '.event', function (event) {
var dt = event.originalEvent.dataTransfer;
dt.setData('Text', $(this).attr('id'));
});
$(document).on('dragenter dragover drop', '#our_table td', function (event) {
event.preventDefault();
if (event.type === 'drop') {
var data = event.originalEvent.dataTransfer.getData(
'Text',
$(this).attr('id'),
);
if ($(this).find('span').length === 0) {
de = $('#' + data).detach();
de.appendTo($(this));
//alert("ok"); //mine
document.getElementById('done').innerHTML = data + ' moved!';
}
}
});
$(document).on('click', '.restore', function () {
$('#our_table').html(originTable);
});
});
table th,
table td {
height: 30px;
width: 200px;
border: solid 1px;
}
table span {
display:block;
background-color: #09C;
height: 100%;
width: 100%;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<button class = "restore">Restore</button>
<div
id = "done"
style = "text-align: center; color: red"
></div>
<table
id = "our_table"
>
<tr>
<th>Jun 1</th>
<th>Jun 2</th>
<th>Jun 3</th>
<th>Jun 4</th>
<th>Jun 5</th>
</tr>
<tr>
<td>
<span
class = "event"
id = "a"
draggable = "true"
>aaa</span
>
</td>
<td>
<span
class = "event"
id = "b"
draggable = "true"
>bbb</span
>
</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<span
class = "event"
id = "c"
draggable = "true"
>ccc</span
>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<span
class = "event"
id = "d"
draggable = "true"
>dddd</span
>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<span
class = "event"
id = "e"
draggable = "true"
>eeee</span
>
</td>
<td></td>
<td></td>
<td></td>
<td>
<span
class = "event"
id = "f"
draggable = "true"
>ffff</span
>
</td>
</tr>
<tr>
<td>
<span
class = "event"
id = "g"
draggable = "true"
>gggg</span
>
</td>
<td></td>
<td></td>
<td>
<span
class = "event"
id = "h"
draggable = "true"
>hhhh</span
>
</td>
<td></td>
</tr>
</table>
Я попробовал getBoundingClientRect(); Я не думаю, что это правильно, даже после перезагрузки пролет больше не движется. Пожалуйста, посмотрите jsfiddle.net/adgram/714w6x3t/106