{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/directives/click-draggable/index.ts"],"sourcesContent":["/*\n\t需求：实现一个拖拽指令，可在父元素区域任意拖拽元素。\n\n\t思路：\n\t\t1、设置需要拖拽的元素为absolute，其父元素为relative。\n\t\t2、鼠标按下(onmousedown)时记录目标元素当前的 left 和 top 值。\n\t\t3、鼠标移动(onmousemove)时计算每次移动的横向距离和纵向距离的变化值，并改变元素的 left 和 top 值\n\t\t4、鼠标松开(onmouseup)时完成一次拖拽\n\n\t使用：在 Dom 上加上 v-draggable 即可\n\t<div class=\"dialog-model\" v-draggable></div>\n*/\nimport { withInstallDirective } from \"../../utils\";\nimport type { Directive } from \"vue\";\n\nconst DraggableDirective: Directive<HTMLElement> = {\n\tmounted(el) {\n\t\tel.style.cursor = \"move\";\n\t\tel.style.position = \"absolute\";\n\t\tel.onmousedown = (e): void => {\n\t\t\tconst parent = el.parentElement;\n\t\t\tif (parent === null) return;\n\t\t\tconst disX = e.pageX - el.offsetLeft;\n\t\t\tconst disY = e.pageY - el.offsetTop;\n\t\t\tdocument.onmousemove = (e): void => {\n\t\t\t\tlet x = e.pageX - disX;\n\t\t\t\tlet y = e.pageY - disY;\n\t\t\t\tconst maxX = parent.offsetWidth - el.offsetWidth;\n\t\t\t\tconst maxY = parent.offsetHeight - el.offsetHeight;\n\t\t\t\tif (x < 0) {\n\t\t\t\t\tx = 0;\n\t\t\t\t} else if (x > maxX) {\n\t\t\t\t\tx = maxX;\n\t\t\t\t}\n\n\t\t\t\tif (y < 0) {\n\t\t\t\t\ty = 0;\n\t\t\t\t} else if (y > maxY) {\n\t\t\t\t\ty = maxY;\n\t\t\t\t}\n\t\t\t\tel.style.left = `${x}px`;\n\t\t\t\tel.style.top = `${y}px`;\n\t\t\t};\n\t\t\tdocument.onmouseup = (): void => {\n\t\t\t\tdocument.onmousemove = document.onmouseup = null;\n\t\t\t};\n\t\t};\n\t},\n};\n\n/** 使元素可在父元素范围内拖拽的 Vue 指令。 */\nexport const vDraggable = withInstallDirective(DraggableDirective, \"draggable\");\nexport default vDraggable;\n"],"mappings":";;AAmDA,MAAa,aAAa,qBAAqB,EAnC9C,QAAQ,IAAI;CACX,GAAG,MAAM,SAAS;CAClB,GAAG,MAAM,WAAW;CACpB,GAAG,eAAe,MAAY;EAC7B,MAAM,SAAS,GAAG;EAClB,IAAI,WAAW,MAAM;EACrB,MAAM,OAAO,EAAE,QAAQ,GAAG;EAC1B,MAAM,OAAO,EAAE,QAAQ,GAAG;EAC1B,SAAS,eAAe,MAAY;GACnC,IAAI,IAAI,EAAE,QAAQ;GAClB,IAAI,IAAI,EAAE,QAAQ;GAClB,MAAM,OAAO,OAAO,cAAc,GAAG;GACrC,MAAM,OAAO,OAAO,eAAe,GAAG;GACtC,IAAI,IAAI,GACP,IAAI;QACE,IAAI,IAAI,MACd,IAAI;GAGL,IAAI,IAAI,GACP,IAAI;QACE,IAAI,IAAI,MACd,IAAI;GAEL,GAAG,MAAM,OAAO,GAAG,EAAE;GACrB,GAAG,MAAM,MAAM,GAAG,EAAE;EACrB;EACA,SAAS,kBAAwB;GAChC,SAAS,cAAc,SAAS,YAAY;EAC7C;CACD;AACD,EAI8C,GAAoB,WAAW"}