如何拖动一个div(各种元素都类似)

向右看齐 2023-07-15 13:19 112阅读 0赞

如何拖动一个元素
思路如下:

  • 鼠标在元素范围里按下:进入拖动状态
  • 鼠标抬起:取消拖动状态
  • 鼠标在拖动状态下移动时:利用transform对元素进行移动
  • 每次移动的位移 = 这次鼠标位置-上次鼠标位置e.clientX - lastX; e.clientY - lastY
  • 每次移动完都记录一下上次的位置translateX,translateY

效果:
在这里插入图片描述

话不多说,简单实现如下:
html 和 css很简单:

  1. <div id="my-div"></div>
  2. #my-div{
  3. width: 100px;
  4. height: 100px;
  5. background: #EEAA11;
  6. cursor:move;
  7. }

js:

  1. var myDiv = document.getElementById("my-div");
  2. var moving = false; //是否进入拖动状态
  3. //记录上次鼠标位置
  4. var lastX = null;
  5. var lastY = null;
  6. //记录上次移动完的transform位移
  7. var translateX = 0;
  8. var translateY = 0;
  9. //鼠标按下,进入拖动状态
  10. myDiv.onmousedown = function(e) {
  11. moving = true;
  12. }
  13. //鼠标抬起,取消拖动状态
  14. window.onmouseup = function(e) {
  15. if(moving === true) {
  16. moving = false;
  17. lastX = null;
  18. lastY = null;
  19. }
  20. }
  21. //移动过程
  22. window.onmousemove = function(e) {
  23. if(moving) {
  24. if(lastX&&lastY) {
  25. console.log("onmousemove",moving)
  26. pX=e.clientX - lastX;
  27. pY=e.clientY - lastY;
  28. translateX = translateX + pX;
  29. translateY = translateY + pY;
  30. myDiv.style.transform = `translateX(${ translateX}px) translateY(${ translateY}px)`
  31. }
  32. lastX = e.clientX;
  33. lastY = e.clientY;
  34. }
  35. }

发表评论

表情:
评论列表 (有 0 条评论,112人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js 鼠标拖动div

    div中心跟踪鼠标动而动 得到鼠标坐标,移动时div的左上距离为鼠标两坐标减去div左上顶点到中心的距离 div任意位置随鼠标动而动 得到鼠标第一次坐标,移动时div