tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 7.24 kB
Source Map (JSON)
{"version":3,"file":"draggable.mjs","sources":["../../../../src/_common/js/color-picker/draggable.ts"],"sourcesContent":["/* eslint-disable no-use-before-define */\nexport interface Coordinate {\n x: number;\n y: number;\n}\n\nexport type DraggableEvent = MouseEvent;\n\ninterface DraggableCallback {\n (coordinate: Coordinate, event?: DraggableEvent): void;\n}\n\nexport interface DraggableProps {\n start?: DraggableCallback;\n drag?: DraggableCallback;\n end?: DraggableCallback;\n}\n\ninterface DraggableHandles {\n start: (event: DraggableEvent) => void;\n drag: (event: DraggableEvent) => void;\n end: (event: DraggableEvent) => void;\n}\n\n// 配置项\nconst defaultsOptions: DraggableProps = {\n start: (coordinate: Coordinate, event: DraggableEvent) => {},\n drag: (coordinate: Coordinate, event: DraggableEvent) => {},\n end: (coordinate: Coordinate, event: DraggableEvent) => {},\n};\n\nexport class Draggable {\n private dragging = false;\n\n private $el: HTMLElement;\n\n private props: DraggableProps;\n\n private handles: DraggableHandles;\n\n constructor(el: HTMLElement, options?: DraggableProps) {\n this.$el = el;\n this.props = { ...defaultsOptions, ...options };\n this.handles = {\n start: this.#dragStart.bind(this),\n drag: this.#drag.bind(this),\n end: this.#dragEnd.bind(this),\n };\n this.$el.addEventListener('mousedown', this.handles.start, false);\n }\n\n #dragStart(event: DraggableEvent) {\n if (this.dragging) {\n return;\n }\n // event.preventDefault();\n window.addEventListener('mousemove', this.handles.drag, false);\n window.addEventListener('mouseup', this.handles.end, false);\n window.addEventListener('contextmenu', this.handles.end, false);\n this.dragging = true;\n this.props.start(this.#getCoordinate(event), event);\n }\n\n #drag(event: DraggableEvent) {\n if (!this.dragging) {\n return;\n }\n this.props.drag(this.#getCoordinate(event), event);\n }\n\n #dragEnd(event: DraggableEvent) {\n setTimeout(() => {\n this.dragging = false;\n this.props.end(this.#getCoordinate(event), event);\n }, 0);\n window.removeEventListener('mousemove', this.handles.drag, false);\n window.removeEventListener('mouseup', this.handles.end, false);\n window.removeEventListener('contextmenu', this.handles.end, false);\n }\n\n #getCoordinate(event: DraggableEvent) {\n const rect = this.$el.getBoundingClientRect();\n const mouseEvent = event;\n const left = mouseEvent.clientX - rect.left;\n const top = mouseEvent.clientY - rect.top;\n return {\n y: Math.min(Math.max(0, top), rect.height),\n x: Math.min(Math.max(0, left), rect.width),\n };\n }\n\n destroy() {\n this.$el.removeEventListener('mousedown', this.handles.start, false);\n window.removeEventListener('mousemove', this.handles.drag, false);\n window.removeEventListener('mouseup', this.handles.end, false);\n window.removeEventListener('contextmenu', this.handles.end, false);\n }\n}\n\nexport default Draggable;\n"],"names":["defaultsOptions","start","coordinate","event","drag","end","_Draggable_brand","WeakSet","Draggable","el","options","_classCallCheck","_classPrivateMethodInitSpec","_defineProperty","$el","props","_objectSpread","handles","_assertClassBrand","_dragStart","bind","_drag","_dragEnd","addEventListener","_createClass","key","value","destroy","removeEventListener","window","dragging","_getCoordinate","call","_this","setTimeout","rect","getBoundingClientRect","mouseEvent","left","clientX","top","clientY","y","Math","min","max","height","x","width"],"mappings":"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"}