move-ele.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. export default {
  2. inserted(el, { value, modifiers }, vnode) {
  3. let [_x, _y] = [0, 0];
  4. // 当前拖动事务开始前元素的left,top
  5. let [oleft, otop] = [0, 0];
  6. // 元素移动后的left,top
  7. let [left, top] = [0, 0];
  8. let isDrag = false;
  9. let moveHandle = function(e) {
  10. isDrag = true;
  11. if (modifiers.prevent) {
  12. e.preventDefault();
  13. }
  14. left = oleft + e.pageX - _x;
  15. top = otop + e.pageY - _y;
  16. if (value && value.mouseMove) {
  17. value.mouseMove({ left, top });
  18. } else {
  19. el.style.left = left + "px";
  20. el.style.top = top + "px";
  21. }
  22. };
  23. let upHandle = function(e) {
  24. if (modifiers.prevent) {
  25. e.preventDefault();
  26. }
  27. oleft = left;
  28. otop = top;
  29. if (value && value.mouseUp) value.mouseUp({ oleft, otop });
  30. if (value && value.click && !isDrag) value.click();
  31. document.removeEventListener("mousemove", moveHandle);
  32. document.removeEventListener("mouseup", upHandle);
  33. isDrag = false;
  34. };
  35. el.addEventListener("mousedown", function(e) {
  36. if (modifiers.prevent) {
  37. e.preventDefault();
  38. }
  39. _x = e.pageX;
  40. _y = e.pageY;
  41. oleft = el.offsetLeft;
  42. otop = el.offsetTop;
  43. if (value && value.mouseDown) value.mouseDown({ oleft, otop });
  44. document.addEventListener("mousemove", moveHandle);
  45. document.addEventListener("mouseup", upHandle);
  46. });
  47. }
  48. };