2017-11-06 23 views
1

HTML5 Drag/Dropを使用すると、要素をドラッグすると、スクリーンショットに示すように、ドロップゾーンがUIから部分的に消えます。画像内の部分的に欠落している部分には赤い境界線があります。下のコードから "hr"タグを削除すると、それは動作し、要素をドラッグするとdivは消えません!これはChromeブラウザでのみ発生します。すべてのコードは以下の通りです。誰がなぜこれが起こっているのか知っていますか?私のテストで要素をドラッグ(ドロップ/ドラッグ)するとdropzone(div)が部分的に消えるのはなぜですか?

<!DOCTYPE html> 

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
<title></title> 

<style> 
    .objects { 
     display: inline-block; 
     background-color: #FFF3CC; 
     border: #DFBC6A 1px solid; 
     width: 50px; 
     height: 50px; 
     margin: 10px; 
     padding: 8px; 
     font-size: 18px; 
     text-align: center; 
     box-shadow: 2px 2px 2px #999; 
     cursor: move; 
    } 

    #drop_zone { 
     background-color: #EEE; 
     border: #f00 1px solid; 
     width: 280px; 
     height: 200px; 
     padding: 8px; 
     font-size: 18px; 
    } 
</style> 

<script> 
     function _(id){ 
      return document.getElementById(id); 
     } 
     var droppedIn = false; 
     function drag_start(event) { 

      _('app_status').innerHTML = "Dragging the " + 
event.target.getAttribute('id'); 

      event.dataTransfer.dropEffect = "move"; 
      event.dataTransfer.setData("text", 
event.target.getAttribute('id')); 
     } 
     function drag_enter(event) { 
      _('app_status').innerHTML = "You are dragging over the 
"+event.target.getAttribute('id'); 
     } 
     function drag_leave(event) { 
      _('app_status').innerHTML = "You left the 
"+event.target.getAttribute('id'); 
     } 
     function drag_drop(event) { 
      event.preventDefault(); /* Prevent undesirable default behavior 
while dropping */ 
      var elem_id = event.dataTransfer.getData("text"); 
      event.target.appendChild(_(elem_id)); 
      _('app_status').innerHTML = "Dropped "+elem_id+" into the 
"+event.target.getAttribute('id'); 
      _(elem_id).removeAttribute("draggable"); 
      _(elem_id).style.cursor = "default"; 
      droppedIn = true; 
     } 
     function drag_end(event) { 
      if(droppedIn == false){ 
       _('app_status').innerHTML = "You let the 
"+event.target.getAttribute('id')+" go."; 
      } 
      droppedIn = false; 
     } 
     function readDropZone(){ 
    alert('dropzone'); 
      for(var i=0; i < _("drop_zone").children.length; i++){ 
       alert(_("drop_zone").children[i].id+" is in the drop zone"); 
      } 
      /* Run Ajax request to pass any data to your server */ 
     } 
</script> 

</head> 
<body> 

<h2 id="app_status">App status...</h2> 

<h1>Drop Zone</h1> 

<div id="drop_zone" ondragenter="drag_enter(event)" 
ondrop="drag_drop(event)" ondragover="return false" 
ondragleave="drag_leave(event)"></div> 
<div id="object1" class="objects" draggable="true" 
ondragstart="drag_start(event)" ondragend="drag_end(event)">object 1</div> 
<div id="object2" class="objects" draggable="true" 
ondragstart="drag_start(event)" ondragend="drag_end(event)">object 2</div> 
<div id="object3" class="objects" draggable="true" 
ondragstart="drag_start(event)" ondragend="drag_end(event)">object 3</div> 

<hr /> 
<br /> 
<button onclick="readDropZone()">Get Object Data</button> 


</body> 
</html> 

DIV display cut off

答えて

1

、私は<hr />を削除した場合でも、エラーがまだ再現されました。私は、それがh2#app_statusテキストを変更した後に発生することに気づいた。 div#drop_zoneと表示スタイルとしてinline-blockのdivを持つのような次の要素をすべてラップすると、そのような消滅はありません。

<style> 
    #drop-zone-wrapper {display: inline-block;} 
</style> 

<div id="drop-zone-wrapper"> 
    <div id="drop_zone" ondragenter="drag_enter(event)" 
     ondrop="drag_drop(event)" ondragover="return false" 
     ondragleave="drag_leave(event)"></div> 
    <div id="object1" class="objects" draggable="true" 
     ondragstart="drag_start(event)" ondragend="drag_end(event)">object 1</div> 
    <div id="object2" class="objects" draggable="true" 
     ondragstart="drag_start(event)" ondragend="drag_end(event)">object 2</div> 
    <div id="object3" class="objects" draggable="true" 
     ondragstart="drag_start(event)" ondragend="drag_end(event)">object 3</div> 
</div> 
関連する問題