diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index dfe3e54373..2db64d6e09 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -29,15 +29,16 @@ export default Vue.extend({
 			notes: [],
 			connection: null,
 			connectionId: null,
-			date: null,
-			isTop: true
+			date: null
 		};
 	},
+
 	computed: {
 		alone(): boolean {
 			return (this as any).os.i.followingCount == 0;
 		}
 	},
+
 	mounted() {
 		this.connection = (this as any).os.stream.getConnection();
 		this.connectionId = (this as any).os.stream.use();
@@ -51,6 +52,7 @@ export default Vue.extend({
 
 		this.fetch();
 	},
+
 	beforeDestroy() {
 		this.connection.off('note', this.onNote);
 		this.connection.off('follow', this.onChangeFollowing);
@@ -60,6 +62,7 @@ export default Vue.extend({
 		document.removeEventListener('keydown', this.onKeydown);
 		window.removeEventListener('scroll', this.onScroll);
 	},
+
 	methods: {
 		fetch(cb?) {
 			this.fetching = true;
@@ -78,6 +81,7 @@ export default Vue.extend({
 				if (cb) cb();
 			});
 		},
+
 		more() {
 			if (this.moreFetching || this.fetching || this.notes.length == 0 || !this.existMore) return;
 			this.moreFetching = true;
@@ -94,6 +98,7 @@ export default Vue.extend({
 				this.moreFetching = false;
 			});
 		},
+
 		onNote(note) {
 			// サウンドを再生する
 			if ((this as any).os.isEnableSounds) {
@@ -102,19 +107,23 @@ export default Vue.extend({
 				sound.play();
 			}
 
-			if (this.isTop) this.notes.pop();
 			this.notes.unshift(note);
+
+			const isTop = window.scrollY > 8;
+			if (isTop) this.notes.pop();
 		},
+
 		onChangeFollowing() {
 			this.fetch();
 		},
+
 		onScroll() {
 			if ((this as any).os.i.clientSettings.fetchOnScroll !== false) {
 				const current = window.scrollY + window.innerHeight;
 				if (current > document.body.offsetHeight - 8) this.more();
 			}
-			this.isTop = window.scrollY < 100;
 		},
+
 		onKeydown(e) {
 			if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA') {
 				if (e.which == 84) { // t
@@ -122,6 +131,7 @@ export default Vue.extend({
 				}
 			}
 		},
+
 		warp(date) {
 			this.date = date;
 			this.fetch();
diff --git a/src/client/app/mobile/views/components/timeline.vue b/src/client/app/mobile/views/components/timeline.vue
index 546270db95..11b82aa456 100644
--- a/src/client/app/mobile/views/components/timeline.vue
+++ b/src/client/app/mobile/views/components/timeline.vue
@@ -37,8 +37,7 @@ export default Vue.extend({
 			notes: [],
 			existMore: false,
 			connection: null,
-			connectionId: null,
-			isTop: true
+			connectionId: null
 		};
 	},
 	computed: {
@@ -54,18 +53,13 @@ export default Vue.extend({
 		this.connection.on('follow', this.onChangeFollowing);
 		this.connection.on('unfollow', this.onChangeFollowing);
 
-		window.addEventListener('scroll', this.onScroll);
-
-		this.fetch();
+this.fetch();
 	},
 	beforeDestroy() {
 		this.connection.off('note', this.onNote);
 		this.connection.off('follow', this.onChangeFollowing);
 		this.connection.off('unfollow', this.onChangeFollowing);
-		this.connection.off('unfollow', this.onChangeFollowing);
 		(this as any).os.stream.dispose(this.connectionId);
-
-		window.removeEventListener('scroll', this.onScroll);
 	},
 	methods: {
 		fetch(cb?) {
@@ -101,18 +95,13 @@ export default Vue.extend({
 			});
 		},
 		onNote(note) {
-			this.isTop = window.scrollY < 100;
+			this.notes.unshift(note);
+
+			const isTop = window.scrollY > 8;
+			if (isTop) this.notes.pop();
 		},
 		onChangeFollowing() {
 			this.fetch();
-		},
-		onScroll() {
-			if ((this as any).os.i.clientSettings.fetchOnScroll !== false) {
-				const current = window.scrollY + window.innerHeight;
-				if (current > document.body.offsetHeight - 8) this.more();
-			}
-			if (window.scrollY > 100) this.isTop = false;
-			else this.isTop = true;
 		}
 	}
 });