diff --git a/src/components/board/Board.vue b/src/components/board/Board.vue index eed4ec04c..e6bb69547 100644 --- a/src/components/board/Board.vue +++ b/src/components/board/Board.vue @@ -54,7 +54,11 @@ -
+
@@ -117,6 +122,8 @@ export default { draggingStack: false, loading: true, newStackTitle: '', + currentScrollPosX: null, + currentMousePosX: null, } }, computed: { @@ -184,12 +191,40 @@ export default { this.$store.dispatch('createStack', newStack) this.newStackTitle = '' }, + + onMouseDown(event) { + this.startMouseDrag(event) + }, + + startMouseDrag(event) { + if (!('dragscrollEnabled' in event.target.dataset)) { + return + } + + event.preventDefault() + this.currentMousePosX = event.clientX + this.currentScrollPosX = this.$refs.board.scrollLeft + window.addEventListener('mousemove', this.handleMouseDrag) + window.addEventListener('mouseup', this.stopMouseDrag) + window.addEventListener('mouseleave', this.stopMouseDrag) + }, + + handleMouseDrag(event) { + event.preventDefault() + const deltaX = event.clientX - this.currentMousePosX + this.$refs.board.scrollLeft = this.currentScrollPosX - deltaX + }, + + stopMouseDrag(event) { + window.removeEventListener('mousemove', this.handleMouseDrag) + window.removeEventListener('mouseup', this.stopMouseDrag) + window.removeEventListener('mouseleave', this.stopMouseDrag) + }, }, }