drag.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. export const drag = {
  2. inserted(el) {
  3. let oDiv = el
  4. // 左边距最大值
  5. let maxLeft = el.parentNode.clientWidth - el.clientWidth
  6. // 上边距最大值
  7. let maxTop = el.parentNode.clientHeight - el.clientHeight
  8. oDiv.onmousedown = function (e) {
  9. // 鼠标按下,计算当前元素距离可视区的距离
  10. let disX = e.clientX - oDiv.offsetLeft
  11. let disY = e.clientY - oDiv.offsetTop
  12. document.onmousemove = function (e) {
  13. // 获取到鼠标拖拽后的横向位移(距离父级元素)
  14. let l = e.clientX - disX
  15. // 获取到鼠标拖拽后的纵向位移(距离父级元素)
  16. let t = e.clientY - disY
  17. oDiv.style.left = l + 'px'
  18. oDiv.style.top = t + 'px'
  19. if (e.clientX - disX <= 0) {
  20. oDiv.style.left = 0 + 'px'
  21. }
  22. if (e.clientY - disY <= 0) {
  23. oDiv.style.top = 0 + 'px'
  24. }
  25. if (e.clientX - disX >= maxLeft) {
  26. oDiv.style.left = maxLeft + 'px'
  27. }
  28. if (e.clientY - disY >= maxTop) {
  29. oDiv.style.top = maxTop + 'px'
  30. }
  31. }
  32. // 松开事件后,移除事件
  33. document.onmouseup = function () {
  34. document.onmousemove = null
  35. document.onmouseup = null
  36. }
  37. }
  38. }
  39. }