HTML5 でのドラッグ アンド ドロップに奇妙な問題があります。
テキストを含む div である 3 つのターゲット ゾーンと、画像を含む div である 1 つのソース ゾーンがあります。
dragenter および dragleave イベントを使用して、アクティブなターゲット ゾーンの境界を変更し、ドラッグされたオブジェクトが着地する場所を投影します。
問題は、テキストの上にドラッグするとすぐに、何らかの理由で dragleave イベントが発生し、境界線が削除されることです。
そして、ここにいくつかのインラインコードがあります:
HTML
<h1>Targets</h1>
<div class="targets">
<div class="target">I am a target<br/>Touch text while dragging to see the problem</div>
<div class="target">I am a target<br/>Touch text while dragging to see the problem</div>
<div class="target">I am a target<br/>Touch text while dragging to see the problem</div>
</div>
<h1>Source</h1>
<div class="source" draggable="true">
<img class="source_image" src="http://lorempixel.com/output/technics-q-c-184-69-8.jpg" alt="image" width="184" height="69"/>
</div>
JS
$("div.source").on('dragstart', function(e) {
$(this).fadeTo('slow', 0.4);
});
$("div.source").on('dragend', function(e) {
$(this).fadeTo('slow', 1);
});
$("div.target").on('dragover', function(e) {
if (e.preventDefault) {
e.preventDefault();
}
e.dataTransfer.dropEffect = 'move';
return false;
});
$("div.target").on('dragenter', function(e) {
$(this).addClass('over');
});
$("div.target").on('dragleave', function(e) {
$(this).removeClass('over');
});
CSS
h1 {
font-size: 2em;
text-align: center;
}
.target {
margin: 1em;
display:inline-block;
width: 184px;
height: 69px;
border: 5px #995555 solid;
border-radius: 5px;
background-color: #AAAAAA;
vertical-align: bottom;
text-align: center;
font-size: 1.1em;
font-weight: bold;
line-height: 0.9em;
}
.target.over {
border: 5px #0A0 dashed;
}
.source {
margin: 1em;
display:inline-block;
width: 184px;
height: 69px;
border: 5px #555599 solid;
border-radius: 5px;
background-color: #CCCCCC;
vertical-align: bottom;
text-align: center;
font-size: 1.4em;
font-weight: bold;
}
テキストに触れても境界線を変更し続けるための解決策を知っている人はいますか?
別の質問は、ドラッグされているソース div の周りの境界線を維持できるかどうかです。
最後に、ドラッグ アンド ドロップ可能な jQuery UI を使用してこれらの両方を実行できることを認識していますが、ネイティブの HTML5 ドラッグ アンド ドロップでこれを実行できるかどうかは特に疑問に思っています。