Html5 draggable hide оригинальный элемент
Когда вы начинаете перетаскивать элемент с помощью атрибута draghable HTML5, оригинальный элемент все еще отображается, поэтому в итоге я вижу два элемента, а не один.
Как я могу сделать, чтобы только перемещаемый элемент был видимым (исходный должен быть мгновенно скрыт).
<script>
function startDrag() {
// hide initial element
}
function endDrag() {
// reset initial element
}
</script>
<div class="draggable" draggable="true"
ondragstart="startDrag(event)"
ondragend="endDrag(event)"
></div>
Здесь jsfiddle, чтобы показать проблему https://jsfiddle.net/gjc5p4qp/
Ответы
Ответ 1
Вы можете преуспеть в этом хакерском решении. Внутренняя draggability не позволяет стили CSS: opacity:0;
, visibility:hidden
или display:none
.
Но вы можете сделать это, используя: transform:translateX(-9999px)
.
Я обновил JSFiddle с помощью решения.
Ответ 2
Так как просто установка visibility: hidden
не работает, я нашел другое довольно взломанное решение: установите visibility: hidden
одну миллисекунду после запуска события перетаскивания.
function startDrag(e) {
setTimeout(function() {
e.target.style.visibility = "hidden";
}, 1);
}
function endDrag(e) {
setTimeout(function() {
e.target.style.visibility = "";
}, 1);
}
body {
display: inline-block;
outline: 1px solid black;
}
.draggable {
border-radius: 4px;
background: #CC0000;
width: 40px;
height: 40px;
}
<div class="draggable" draggable="true" ondragstart="startDrag(event)" ondragend="endDrag(event)">
</div>
Ответ 3
Нашел это: fooobar.com/info/5553763/...
С чистым решением, чтобы вместо этого скрыть элемент source/original в обработчике dragover.
var dragging;
function dragstart(e) {
dragging = $(this);
}
function dragover(e) {
dragging.hide();
}
function dragend(e) {
if (dragging) {
dragging.show();
dragging = undefined;
}
}