ここに示す例に固執します: http://www.w3schools.com/html/html5_draganddrop.asp
次のドキュメントがあるとします。
<!DOCTYPE HTML>
<html>
<head>
<script>
<!-- script comes in the text below -->
</script>
</head>
<body>
<div id="div1" ondrop="drop(event)"
ondragover="allowDrop(event)"></div>
<img id="drag1" src="img_logo.gif" draggable="true"
ondragstart="drag(event)" width="336" height="69">
</body>
</html>
通常のドラッグ&ドロップ
通常のドラッグ アンド ドロップには、それぞれの要素に次のような機能が割り当てられています。
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));
}
ドラッグ&コピー
一方、drop 関数を変更して、DOM 要素を移動する代わりにコピーする必要があります。
//other functions stay the same
function drop(ev) {
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data).cloneNode(true));
}
このページを試してください: http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop
そして、 に a を追加.cloneNode(true)
しgetElementById(data)
ます。
ファイルマネージャーで次のようなことを行うこともできます: Ctrl-キーで移動からコピーに切り替えます:
function drop(ev) {
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
if (ev.ctrlKey)
ev.target.appendChild(document.getElementById(data).cloneNode(true));
else
ev.target.appendChild(document.getElementById(data));
}