拖放功能适用于移动设备

huangapple go评论122阅读模式
英文:

Drag and Drop for mobile devices

问题

这是你的翻译内容:

  1. 我有一个关于这段代码的问题,因为它在笔记本电脑和台式机上运行得很完美,但在移动设备上不起作用,请帮助我并告诉我需要添加哪些内容,以便它可以在两者上都运行。
  2. 我已经添加了触摸事件,但它没有起作用。
  3. 这是我的JavaScript代码:
  4. const draggableElements = document.querySelectorAll(".draggable");
  5. const droppableElements = document.querySelectorAll(".droppable");
  6. draggableElements.forEach(elem => {
  7. elem.addEventListener("dragstart", dragStart);
  8. elem.addEventListener("touchstart", dragStart);
  9. });
  10. droppableElements.forEach(elem => {
  11. elem.addEventListener("dragenter", dragEnter);
  12. elem.addEventListener("dragover", dragOver);
  13. elem.addEventListener("dragleave", dragLeave);
  14. elem.addEventListener("drop", drop);
  15. elem.addEventListener("touchstart", dragEnter);
  16. elem.addEventListener("touchmove", dragOver);
  17. elem.addEventListener("touchend", drop);
  18. elem.addEventListener("touchcancel", dragLeave);
  19. });
  20. function dragStart(event) {
  21. event.dataTransfer.setData('text/plain', event.target.id);
  22. setTimeout(() => {
  23. event.target.classList.add('hide');
  24. }, 0);
  25. }
  26. function dragEnter(event) {
  27. event.preventDefault();
  28. event.target.classList.add('droppable-hover');
  29. }
  30. function dragOver(event) {
  31. event.preventDefault();
  32. event.target.classList.add('droppable-hover');
  33. }
  34. function dragLeave(event) {
  35. event.target.classList.remove('droppable-hover');
  36. }
  37. function drop(event) {
  38. event.preventDefault();
  39. var id = event.dataTransfer.getData("text/plain");
  40. var draggedElement = document.getElementById(id);
  41. var container = event.target.closest(".droppable");
  42. if (container && draggedElement) {
  43. var existingImage = container.querySelector("img");
  44. if (existingImage) {
  45. const draggableContainer = document.querySelector(".draggable");
  46. container.removeChild(existingImage);
  47. draggableContainer.appendChild(existingImage);
  48. container.appendChild(draggedElement);
  49. }
  50. existingImage = draggedElement;
  51. }
  52. }

希望对你有所帮助!如果你需要进一步的解释或帮助,请随时提出。

英文:

I have a problem with this code because it work perfectly on laptops and desktop devices but not on mobile devices , please help me and tell me what are the things to add so it will work for both.
I added the touch events but it didn't work
This is the my Js code :

  1. const draggableElements = document.querySelectorAll(".draggable");
  2. const droppableElements = document.querySelectorAll(".droppable");
  3. draggableElements.forEach(elem => {
  4. elem.addEventListener("dragstart", dragStart);
  5. elem.addEventListener("touchstart", dragStart);
  6. });
  7. droppableElements.forEach(elem => {
  8. elem.addEventListener("dragenter", dragEnter);
  9. elem.addEventListener("dragover", dragOver );
  10. elem.addEventListener("dragleave", dragLeave);
  11. elem.addEventListener("drop", drop);
  12. elem.addEventListener("touchstart", dragEnter);
  13. elem.addEventListener("touchmove", dragOver );
  14. elem.addEventListener("touchend", drop);
  15. elem.addEventListener("touchcancel", dragLeave);
  16. });
  17. function dragStart(event) {
  18. event.dataTransfer.setData('text/plain', event.target.id);
  19. setTimeout(() => {
  20. event.target.classList.add('hide');
  21. }, 0);
  22. }
  23. function dragEnter(event) {
  24. event.preventDefault();
  25. event.target.classList.add('droppable-hover');
  26. }
  27. function dragOver(event) {
  28. event.preventDefault();
  29. event.target.classList.add('droppable-hover');
  30. }
  31. function dragLeave(event) {
  32. event.target.classList.remove('droppable-hover');
  33. }
  34. function drop(event) {
  35. event.preventDefault();
  36. var id = event.dataTransfer.getData("text/plain");
  37. var draggedElement = document.getElementById(id);
  38. var container = event.target.closest(".droppable");
  39. if (container && draggedElement) {
  40. var existingImage = container.querySelector("img");
  41. if (existingImage) {
  42. const draggableContainer = document.querySelector(".draggable");
  43. container.removeChild(existingImage);
  44. draggableContainer.appendChild(existingImage);
  45. container.appendChild(draggedElement);
  46. }
  47. existingImage = draggedElement;
  48. }
  49. }

答案1

得分: 1

抱歉,移动设备上的拖放功能可能会有些问题。好消息是您可以使用polyfill来解决这些问题。请查看这里:https://www.npmjs.com/package/drag-drop-touch

英文:

Unfortunately Drag & Drop on mobile can be a bit sketchy.

The good news is that you can pollyfill these issues.

Have a look here -> https://www.npmjs.com/package/drag-drop-touch

huangapple
  • 本文由 发表于 2023年3月7日 00:42:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/75653513.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定