ここに示す例に固執します: 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));
}