ドラッグドロップの練習としてコードを書いてみました。
ゆっくりとマウスを動かしているときは実現したい挙動をしてくれるのですが、素早くマウスを動かすとドラッグしたい対象を置き去りにしてしまします。
置き去りにしないようにするにはどうすればいいでしょうか?
わかる方がいればご教授いただければ幸いです。
html
1<table class="box_cover" onMouseDown="return false;" onSelectStart="return false"> 2 <tr class="row1"> 3 <td class="r1_low1"> 4 <div id="box1" class="item">キリン1</div> 5 </td> 6 <td class="r1_low2"> 7 <div id="box2" class="item">ライオン1</div> 8 </td> 9 <td class="r1_low3"> 10 <div id="box3" class="item">ゾウ1</div> 11 </td> 12 </tr> 13 <tr class="row2"> 14 <td class="r2_low1"> 15 </td> 16 <td class="r2_low2"> 17 <div id="box7" class="item">ひよこ1</div> 18 </td> 19 <td class="r2_low3"> 20 </td> 21 </tr> 22 <tr class="row3"> 23 <td class="r3_low1"> 24 </td> 25 <td class="r3_low2"> 26 <div id="box8" class="item">ひよこ2</div> 27 </td> 28 <td class="r3_low3"> 29 </td> 30 </tr> 31 <tr class="row4"> 32 <td class="r4_low1"> 33 <div id="box10" class="item">ゾウ2</div> 34 </td> 35 <td class="r4_low2"> 36 <div id="box11" class="item">ライオン2</div> 37 </td> 38 <td class="r4_low3"> 39 <div id="box12" class="item">キリン2</div> 40 </td> 41 </tr> 42</table>
JavaScript
1let table=document.querySelector('.box_cover'); 2 3 function mdown(){ 4 event.target.classList.add('target'); 5 table.addEventListener('mousemove',mmove,false); 6 } 7 8 function mmove(){ 9 let clickPoint=event.target; 10 console.log(clickPoint); 11 let itemHeight=clickPoint.clientHeight/2; 12 let itemWidth=clickPoint.clientWidth/2; 13 14 if( clickPoint.classList.contains('target') ){ 15 16 if( clickPoint.classList.contains('item') ){ 17 let pageY=event.pageY; 18 let pageX=event.pageX; 19 clickPoint.style.top=`${pageY-itemHeight}px`; 20 clickPoint.style.left=`${pageX-itemWidth}px`; 21 clickPoint.classList.add('zIndex'); 22 clickPoint.classList.add('hover'); 23 } 24 25 } 26 27 28 table.addEventListener('mouseup',mup,false); 29 } 30 31 function mup(){ 32 table.removeEventListener('mousemove',mmove,false); 33 event.target.classList.remove('target'); 34 event.target.classList.remove('zIndex'); 35 } 36 37 table.addEventListener('mousedown',mdown,false);
Javascript
1 2 let table=document.querySelector('.box_cover'); 3 4 function mdown(){ 5 let clickPoint=event.target; 6 event.target.classList.add('target'); 7 8 table.addEventListener('mousemove',mmove,false); 9 if( clickPoint.classList.contains('target') ){ 10 11 if( clickPoint.classList.contains('item') ){ 12 clickPoint.classList.add('zIndex'); 13 clickPoint.classList.add('hover'); 14 } 15 16 } 17 table.addEventListener('mouseup',mup,false); 18 } 19 20 function mmove(){ 21 let clickPoint=event.target; 22 console.log(clickPoint); 23 //座標の読み取り 24 let itemHeight=clickPoint.clientHeight/2; 25 let itemWidth=clickPoint.clientWidth/2; 26 27 if( clickPoint.classList.contains('target') ){ 28 if( clickPoint.classList.contains('item') ){ 29 let pageY=event.pageY; 30 let pageX=event.pageX; 31 clickPoint.style.top=`${pageY-itemHeight}px`; 32 clickPoint.style.left=`${pageX-itemWidth}px`; 33 } 34 } 35 36 } 37 38 function mup(){ 39 table.removeEventListener('mousemove',mmove,false); 40 event.target.classList.remove('target'); 41 event.target.classList.remove('zIndex'); 42 } 43 44 table.addEventListener('mousedown',mdown,false);