I am creating a scenerio in which I want a component of drag and drop,
and I found one after some work around, which looks like the following
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
let target = ev.target;
let btnsHolder = document.getElementById("buttonsHolder")
let currentBtn;
var data = ev.dataTransfer.getData("text");
//check if there's already a button inside
if (target.children.length > 0){
currentBtn = target.children[0];
btnsHolder.appendChild(currentBtn);
}
target.appendChild(document.getElementById(data));
}
#div1 {
width: 350px;
height: 70px;
padding: 10px;
border: 1px solid #aaaaaa;
}
<p>Drag the W3Schools image into the rectangle:</p>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<div id="buttonsHolder">
<button id="test" draggable="true" ondragstart="drag(event)" width="336" height="69">button 1</button>
<button id="test2" draggable="true" ondragstart="drag(event)" width="336" height="69">button 2</button>
<button id="test3" draggable="true" ondragstart="drag(event)" width="336" height="69">button 3</button>
</div>
but the problem with the same code is,
it is working on pc, but not on mobile screen,
for testing,
after pressing
F12
clicking on toggle device toolbar will enable a mobile view,
and the same code is not working,
what can be the possible issue here?
Some mobile devises don't listen to the drag
event. To solve that you must use the touch event touchstart
, touchend
, touchcancel
, touchleave
, touchmove
TouchEvent - Web APIs
// get The element on which to attach the event
var btn = document.querySelector('.btn');
// attaching each event listener
btn.addEventListener('touchstart', function(){
console.log('btn touched');
})
btn.addEventListener('touchend', function(){
console.log('btn leaved');
})
btn.addEventListener('touchmove', function(){
console.log('btn leaved');
})
btn.addEventListener('touchleave', function(){
console.log('btn moving end');
})
btn.addEventListener('touchcancel', function(){
console.log('btn moving cancel');
})
<button class="btn">test</button>