From d6e2910f747dd05e482e6ce554ee49f405cdb142 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator <kainoa@t1c.dev>
Date: Mon, 22 Aug 2022 22:09:43 -0700
Subject: [PATCH] fix: :bug: fix scrolling bugs

---
 package.json                           |  2 +-
 packages/client/src/pages/timeline.vue |  8 ++++----
 packages/client/src/ui/universal.vue   | 21 ++++++++++++++++++++-
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/package.json b/package.json
index 93ba8755c..5295936e4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "misskey",
-	"version": "12.118.1-calc.11.6",
+	"version": "12.118.1-calc.12",
 	"codename": "aqua",
 	"repository": {
 		"type": "git",
diff --git a/packages/client/src/pages/timeline.vue b/packages/client/src/pages/timeline.vue
index 5f2898a8a..12268b673 100644
--- a/packages/client/src/pages/timeline.vue
+++ b/packages/client/src/pages/timeline.vue
@@ -248,9 +248,9 @@ if (isMobile.value) {
 	}
 
 	function handleTouchMove(evt) {
-		if (!xDown || !yDown) {
-			return;
-		}
+		if (!xDown || !yDown) return;
+
+		if (['INPUT', 'TEXTAREA', 'IMG', 'VIDEO', 'CANVAS'].includes(evt.target.tagName) || evt.target.attributes['contenteditable']) return;
 
 		let xUp = evt.touches[0].clientX;
 		let yUp = evt.touches[0].clientY;
@@ -274,7 +274,7 @@ if (isMobile.value) {
 			timelines.push('global');
 		}
 
-		if (Math.abs(xDiff) > Math.abs(yDiff)) {
+		if (Math.abs(xDiff) > Math.abs(yDiff) && Math.abs(xDiff) > 100) {
 			if (xDiff < 0) {
 				if (src === 'home') {
 					next = 'global';
diff --git a/packages/client/src/ui/universal.vue b/packages/client/src/ui/universal.vue
index d0cba07fc..f856632e0 100644
--- a/packages/client/src/ui/universal.vue
+++ b/packages/client/src/ui/universal.vue
@@ -140,9 +140,28 @@ onMounted(() => {
 
 		window.addEventListener('scroll', () => {
 			let windowY = window.scrollY;
-			postButton.style.transform = `scale(${windowY < scrollPos ? '1' : '0'})`;
+			postButton.style.transform = `scale(${windowY < scrollPos ? '1' : '0.3'})`;
 			scrollPos = windowY;
 		}, { passive: true });
+
+		function createScrollStopListener(element: Window, callback: TimerHandler, timeout: number): () => void {
+			let handle = 0;
+			const onScroll = () => {
+				if (handle) {
+					clearTimeout(handle);
+				}
+				postButton.style.transform = 'scale(0.3)';
+				handle = setTimeout(callback, timeout || 200);
+			};
+			element.addEventListener('scroll', onScroll, { passive: true });
+			return () => {
+				element.removeEventListener('scroll', onScroll);
+			};
+		}
+
+		createScrollStopListener(window, () => {
+			postButton.style.transform = 'scale(1)';
+		} , 200);
 	}
 });