2016-04-02 40 views
7

HTML5 sürüklenebilir özniteliğini kullanarak bir öğeyi sürüklemeye başladığınızda, orijinal öğe hala görünüyor, dolayısıyla iki öğenin bir yerine görünür olmasını sağlarım.html5 sürüklenebilir orijinal öğeyi gizle

Sadece sürüklenen öğeye sahip olmak için nasıl yapabilirim (orijinal olanın bir an önce gizlenmesi gerekir).

<script> 
    function startDrag() { 
    // hide initial element 
    } 

    function endDrag() { 
    // reset initial element 
    } 
</script> 

<div class="draggable" draggable="true" 
    ondragstart="startDrag(event)" 
    ondragend="endDrag(event)" 
></div> 

İşte problemi https://jsfiddle.net/gjc5p4qp/

cevap

9

Bunun bir hacky çözüm başarılı olabilir göstermek için bir jsfiddle bu. Yerel sürüklenebilirlik, CSS stillerini şu şekilde izin vermez: opacity:0;, visibility:hidden veya display:none.

Ancak bunu kullanarak yapabilirsiniz: transform:translateX(-9999px).

JSFiddle numaralı ürünümünü bu çözüm ile güncelledik.

+0

Vay 1 olarak sürüklenen elemanın saydamlığını nasıl ayarlanacağını biliyorsun, gerçekten iyi? – julesbou

+0

Haha, teşekkürler. Bunu yapmanın bir yolunu bulamadım, sürüklenen "hayalet eleman" DOM'de mevcut değil gibi görünüyor, bu yüzden bazı sınırlamalar alıyoruz. Bu [yanıtı] gözden geçirin (http://stackoverflow.com/a/10904112/3938676) – Filipe

+0

@julesbou Filipe bunun için hala uygun bir çözüm yok mu? – Anthony

2

visibility: hidden ayarı yapılmadığı için, başka bir hacky çözümü buldum: sürükleme olayı başladıktan sonra bir milisaniye visibility: hidden ayarlayın.

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>

+2

bir 'setTimeout' kullanmak yerine, bunun için' window.requestAnimationFrame' kullanabilirsiniz: 'işlevi startDrag (e) { window.requestAnimationFrame (function() { e.target.style.visibility = "gizli" }); } ' –

+0

@AndrewAyrıca opaklığın düşmesini nasıl önleyebiliriz? – Anthony