From d17498b79ee478f39e2b28730d1799b0e999cd11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20H=C3=B6tten?= Date: Thu, 16 Nov 2023 12:45:10 +0100 Subject: [PATCH] scroll board by dragging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Simon Hötten --- src/components/board/Board.vue | 39 ++++++++++++++++++++++++++++++++-- src/components/board/Stack.vue | 1 + 2 files changed, 38 insertions(+), 2 deletions(-) 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) + }, }, }