From d18ee12d2f395648872daccd5eacc75b6fca27a9 Mon Sep 17 00:00:00 2001 From: syuilo <syuilotan@yahoo.co.jp> Date: Sun, 16 Dec 2018 11:32:20 +0900 Subject: [PATCH] [Client] Add some animations :art: --- package.json | 1 + src/client/app/admin/views/drive.vue | 36 ++++++++++--------- src/client/app/admin/views/users.vue | 30 ++++++++-------- src/client/app/animation.styl | 16 +++++++++ .../app/desktop/views/pages/favorites.vue | 10 +++--- src/client/app/init.ts | 2 ++ .../app/mobile/views/pages/favorites.vue | 12 ++++--- 7 files changed, 67 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index c6f5bbeb30..30ad8489d5 100644 --- a/package.json +++ b/package.json @@ -225,6 +225,7 @@ "vue-loader": "15.4.2", "vue-marquee-text-component": "1.1.0", "vue-router": "3.0.2", + "vue-sequential-entrance": "1.1.3", "vue-style-loader": "4.1.2", "vue-svg-inline-loader": "1.2.4", "vue-template-compiler": "2.5.17", diff --git a/src/client/app/admin/views/drive.vue b/src/client/app/admin/views/drive.vue index 2872155b60..c3a3a40644 100644 --- a/src/client/app/admin/views/drive.vue +++ b/src/client/app/admin/views/drive.vue @@ -18,29 +18,31 @@ <option value="remote">{{ $t('origin.remote') }}</option> </ui-select> </ui-horizon-group> - <div class="kidvdlkg" v-for="file in files"> - <div @click="file._open = !file._open"> - <div> - <div class="thumbnail" :style="thumbnail(file)"></div> - </div> - <div> - <header> - <b>{{ file.name }}</b> - <span class="username">@{{ file.user | acct }}</span> - </header> + <sequential-entrance animation="entranceFromTop" delay="25"> + <div class="kidvdlkg" v-for="file in files"> + <div @click="file._open = !file._open"> <div> + <div class="thumbnail" :style="thumbnail(file)"></div> + </div> + <div> + <header> + <b>{{ file.name }}</b> + <span class="username">@{{ file.user | acct }}</span> + </header> <div> - <span style="margin-right:16px;">{{ file.type }}</span> - <span>{{ file.datasize | bytes }}</span> + <div> + <span style="margin-right:16px;">{{ file.type }}</span> + <span>{{ file.datasize | bytes }}</span> + </div> + <div><mk-time :time="file.createdAt" mode="detail"/></div> </div> - <div><mk-time :time="file.createdAt" mode="detail"/></div> </div> </div> + <div v-show="file._open"> + <ui-button @click="del(file)"><fa :icon="faTrashAlt"/> {{ $t('delete') }}</ui-button> + </div> </div> - <div v-show="file._open"> - <ui-button @click="del(file)"><fa :icon="faTrashAlt"/> {{ $t('delete') }}</ui-button> - </div> - </div> + </sequential-entrance> <ui-button v-if="existMore" @click="fetch">{{ $t('@.load-more') }}</ui-button> </section> </ui-card> diff --git a/src/client/app/admin/views/users.vue b/src/client/app/admin/views/users.vue index b0821c2453..21d41efba8 100644 --- a/src/client/app/admin/views/users.vue +++ b/src/client/app/admin/views/users.vue @@ -38,25 +38,27 @@ <option value="remote">{{ $t('users.origin.remote') }}</option> </ui-select> </ui-horizon-group> - <div class="kofvwchc" v-for="user in users"> - <div> - <a :href="user | userPage(null, true)"> - <mk-avatar class="avatar" :user="user" :disable-link="true"/> - </a> - </div> - <div> - <header> - <b><mk-user-name :user="user"/></b> - <span class="username">@{{ user | acct }}</span> - </header> + <sequential-entrance animation="entranceFromTop" delay="25"> + <div class="kofvwchc" v-for="user in users"> <div> - <span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span> + <a :href="user | userPage(null, true)"> + <mk-avatar class="avatar" :user="user" :disable-link="true"/> + </a> </div> <div> - <span>{{ $t('users.createdAt') }}: <mk-time :time="user.createdAt" mode="detail"/></span> + <header> + <b><mk-user-name :user="user"/></b> + <span class="username">@{{ user | acct }}</span> + </header> + <div> + <span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span> + </div> + <div> + <span>{{ $t('users.createdAt') }}: <mk-time :time="user.createdAt" mode="detail"/></span> + </div> </div> </div> - </div> + </sequential-entrance> <ui-button v-if="existMore" @click="fetchUsers">{{ $t('@.load-more') }}</ui-button> </section> </ui-card> diff --git a/src/client/app/animation.styl b/src/client/app/animation.styl index 8f121b313b..a629165207 100644 --- a/src/client/app/animation.styl +++ b/src/client/app/animation.styl @@ -10,3 +10,19 @@ opacity: 0; transform: scaleY(0); } + +.entranceFromTop { + animation-duration: 0.5s; + animation-name: entranceFromTop; +} + +@keyframes entranceFromTop { + from { + opacity: 0; + transform: translateY(-64px); + } + to { + opacity: 1; + transform: translateY(0); + } +} diff --git a/src/client/app/desktop/views/pages/favorites.vue b/src/client/app/desktop/views/pages/favorites.vue index e7e02c8483..066ce3f53c 100644 --- a/src/client/app/desktop/views/pages/favorites.vue +++ b/src/client/app/desktop/views/pages/favorites.vue @@ -1,9 +1,11 @@ <template> <mk-ui> <main v-if="!fetching"> - <template v-for="favorite in favorites"> - <mk-note-detail class="post" :note="favorite.note" :key="favorite.note.id"/> - </template> + <sequential-entrance animation="entranceFromTop" delay="25"> + <template v-for="favorite in favorites"> + <mk-note-detail class="post" :note="favorite.note" :key="favorite.note.id"/> + </template> + </sequential-entrance> <div class="more" v-if="existMore"> <ui-button inline @click="more">{{ $t('@.load-more') }}</ui-button> </div> @@ -75,7 +77,7 @@ main padding 16px max-width 700px - > .post + > * > .post margin-bottom 16px > .more diff --git a/src/client/app/init.ts b/src/client/app/init.ts index 183ed90edc..d7dd1efedf 100644 --- a/src/client/app/init.ts +++ b/src/client/app/init.ts @@ -8,6 +8,7 @@ import VueRouter from 'vue-router'; import VAnimateCss from 'v-animate-css'; import VModal from 'vue-js-modal'; import VueI18n from 'vue-i18n'; +import SequentialEntrance from 'vue-sequential-entrance'; import VueHotkey from './common/hotkey'; import App from './app.vue'; @@ -287,6 +288,7 @@ Vue.use(VAnimateCss); Vue.use(VModal); Vue.use(VueHotkey); Vue.use(VueI18n); +Vue.use(SequentialEntrance); Vue.component('fa', FontAwesomeIcon); diff --git a/src/client/app/mobile/views/pages/favorites.vue b/src/client/app/mobile/views/pages/favorites.vue index 6ca584ec88..61dd1526ba 100644 --- a/src/client/app/mobile/views/pages/favorites.vue +++ b/src/client/app/mobile/views/pages/favorites.vue @@ -3,9 +3,11 @@ <span slot="header"><span style="margin-right:4px;"><fa icon="star"/></span>{{ $t('title') }}</span> <main> - <template v-for="favorite in favorites"> - <mk-note-detail class="post" :note="favorite.note" :key="favorite.note.id"/> - </template> + <sequential-entrance animation="entranceFromTop" delay="25"> + <template v-for="favorite in favorites"> + <mk-note-detail class="post" :note="favorite.note" :key="favorite.note.id"/> + </template> + </sequential-entrance> <ui-button v-if="existMore" @click="more">{{ $t('@.load-more') }}</ui-button> </main> </mk-ui> @@ -79,13 +81,13 @@ main margin 0 auto padding 8px - > .post + > * > .post margin-bottom 8px @media (min-width 500px) padding 16px - > .post + > * > .post margin-bottom 16px @media (min-width 600px)