シンプルなドラッグ アンド ドロップ設定を作成しました。2 つの div があり、ユーザーはその間に子 div をドラッグできます。子 div が別の div 内に直接ドロップされない限り、正常に動作します。何時間も考えてきましたが、私が見逃している簡単な解決策があるはずです。
(まだ完全には動作していないが)デモはここで見ることができる。https://preview.c9.io/teemoash/fantasyleague/gamething/pete.html?_c9_id=livepreview4&_c9_host=https%3A%2F%2Fide.c9.io
ご協力いただければ幸いです
ありがとう!
HTML は非常にシンプルです。(onDrop および onDragOver イベントで false を返すようにしたことに注意してください)
<div id = "squad" ondrop="drop(event)" ondragover="allowDrop(event)">
<h1>SQUAD</h1>
<div id = "jeff" class = "champion" draggable = "true" ondragstart="drag(event)" ondrop = "return false" ondragover="return false">
<h1>Jeff</h1>
<div class = "attributes">
<div class = "number kills"><span> 4</span><p>Kills</p></div>
<div class = "number deaths"><span>2 </span><p>Deaths</p></div>
<div class = "number GPM"><span> 12</span><p>GPM</p></div>
</div>
</div>
<div id = "Geoff" class = "champion" draggable = "true" ondragstart="drag(event)" ondrop = "return false" ondragover="return false">
<h1>Geoff</h1>
<div class = "attributes">
<div class = "number kills"><span> 7</span><p>Kills</p></div>
<div class = "number deaths"><span>0 </span><p>Deaths</p></div>
<div class = "number GPM"><span> 14</span><p>GPM</p></div>
</div>
</div>
<div id = "jeph" class = "champion" draggable = "true" ondragstart="drag(event)" ondrop = "return false" ondragover="return false">
<h1>Jeph</h1>
<div class = "attributes">
<div class = "number kills"><span> 1</span><p>Kills</p></div>
<div class = "number deaths"><span>9 </span><p>Deaths</p></div>
<div class = "number GPM"><span> 24</span><p>GPM</p></div>
</div>
</div>
</div> <!-- end of squad div-->
<div id = "myTeam" ondrop="drop(event)" ondragover="allowDrop(event)">
<h1>My Team</h1>
</div>
<div id = "scores">
<h1>My Team Scores</h1>
</div>
js は次のようになります。
<script>
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
ベストアンサー1
問題は、ドロップがイベントに関連付けられていることですが、現在の方法では、次のように要素に関連付けられるはずです。
function drop(ev, el) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
el.appendChild(document.getElementById(data));
}
次に、2 つのイベントのdrop(event)
を変更します。フル ページ モードでスニペットを表示して、動作を確認します。drop(event, this)
ondrop
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev, el) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
el.appendChild(document.getElementById(data));
}
* {
margin: 0;
box-sizing: border-box;
}
#squad {
width: 40vw;
height: 90vh;
overflow-y: scroll;
border-radius: 10px;
margin-left: 5vw;
margin-top: 5vh;
background-color: red;
float: left;
}
h1 {
text-align: center;
}
#myTeam {
float: left;
height: 60vh;
width: 40vw;
border-radius: 10px;
background-color: red;
margin-left: 10vw;
margin-top: 5vh;
}
#scores {
width: 40vw;
height: 25vh;
margin-top: 5vh;
margin-left: 10vw;
background-color: red;
border-radius: 10px;
float: left;
}
.champion {
width: 90%;
height: 15vh;
margin: 1%;
padding: 2%;
border: 1px black solid;
background-color: white;
border-radius: 10px;
overflow: hidden;
}
.champion h1 {
float: left;
}
.attributes {
margin-left: 10%;
float: left;
}
.number {
float: left;
text-align: center;
margin-left: 10px;
}
#div1,
#div2 {
width: 90%;
height: 15vh;
margin: 1%;
border: 1px black solid;
border-radius: 10px;
}
<div id="squad" ondrop="drop(event, this)" ondragover="allowDrop(event)">
<h1>SQUAD</h1>
<div id="jeff" class="champion" draggable="true" ondragstart="drag(event)" ondrop="return false" ondragover="return false">
<h1>Jeff</h1>
<div class="attributes">
<div class="number kills"><span> 4</span>
<p>Kills</p>
</div>
<div class="number deaths"><span>2 </span>
<p>Deaths</p>
</div>
<div class="number GPM"><span> 12</span>
<p>GPM</p>
</div>
</div>
</div>
<div id="Geoff" class="champion" draggable="true" ondragstart="drag(event)" ondrop="return false" ondragover="return false">
<h1>Geoff</h1>
<div class="attributes">
<div class="number kills"><span> 7</span>
<p>Kills</p>
</div>
<div class="number deaths"><span>0 </span>
<p>Deaths</p>
</div>
<div class="number GPM"><span> 14</span>
<p>GPM</p>
</div>
</div>
</div>
<div id="jeph" class="champion" draggable="true" ondragstart="drag(event)" ondrop="return false" ondragover="return false">
<h1>Jeph</h1>
<div class="attributes">
<div class="number kills"><span> 1</span>
<p>Kills</p>
</div>
<div class="number deaths"><span>9 </span>
<p>Deaths</p>
</div>
<div class="number GPM"><span> 24</span>
<p>GPM</p>
</div>
</div>
</div>
</div>
<!-- end of squad div-->
<div id="myTeam" ondrop="drop(event, this)" ondragover="allowDrop(event)">
<h1>My Team</h1>
</div>
<div id="scores">
<h1>My Team Scores</h1>
</div>