'html 5 drag and drop not working on mobile screen
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?
Solution 1:[1]
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>
Solution 2:[2]
It might be due to the scroll action overriding. Add touch-action: none;
CSS style to your .draggable
class
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Nagibaba |