2016-04-02 8 views
7

HTML5のドラッグ可能な属性を使用して要素をドラッグすると、元の要素が引き続き表示されるため、最後に2つの要素が表示されるようになります。html5 draggable元の要素を隠す

ドラッグされている要素のみを表示するにはどうすればよいですか(元の要素は一時的に非表示にする必要があります)。

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

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

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

は、ここで問題にhttps://jsfiddle.net/gjc5p4qp/

答えて

9

あなたはこのハックソリューション成功することを示すために、jsfiddleです。ネイティブのドラッグ可能性は、opacity:0;,visibility:hiddenまたはdisplay:noneのようなCSSスタイルを許可しません。

しかし、これは、transform:translateX(-9999px)を使用して行うことができます。

あなたのJSFiddleをこのソリューションで更新しました。

+0

うわー、それはあなたが1にドラッグされた要素の不透明度を設定する方法がわからない、本当に良いのか? – julesbou

+0

ハハ、ありがとう。私はそれを行う方法を見つけることができませんでした、ドラッグされた "ゴースト要素"は、DOMでavaibleではないようですので、いくつかの制限があります。これをチェックアウト[回答](http://stackoverflow.com/a/10904112/3938676) – Filipe

+0

@julesbou Filipeこれにはまだ適切な解決策はありますか? – Anthony

2

単純にvisibility: hiddenを設定しても機能しないので、もう少し面白い解決策が見つかりました。ドラッグイベントが開始されてからvisibility: hiddenを1ミリ秒に設定します。

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

は 'setTimeout'を使用するのではなく、あなたは、このために' window.requestAnimationFrame'を使用することができます。 '関数のstartDrag(E){ window.requestAnimationFrame(関数(){ e.target.style.visibility = "隠されました" ; }); } ' –

+0

@AndrewHedgesどのように不透明度の低下を防止するか考えていますか? – Anthony

関連する問題