summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-04-23 15:33:33 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-04-23 15:33:33 +0900
commit1edb8cf0e920aacec8a44a9affe7ee9302102498 (patch)
tree0351be13902e34595f946a1e135e71b4697d4d2e /src/client
parentfix bug (diff)
downloadsharkey-1edb8cf0e920aacec8a44a9affe7ee9302102498.tar.gz
sharkey-1edb8cf0e920aacec8a44a9affe7ee9302102498.tar.bz2
sharkey-1edb8cf0e920aacec8a44a9affe7ee9302102498.zip
add animation
Diffstat (limited to 'src/client')
-rw-r--r--src/client/directives/click-anime.ts22
-rw-r--r--src/client/directives/index.ts2
-rw-r--r--src/client/style.scss24
-rw-r--r--src/client/ui/default.sidebar.vue12
4 files changed, 54 insertions, 6 deletions
diff --git a/src/client/directives/click-anime.ts b/src/client/directives/click-anime.ts
new file mode 100644
index 0000000000..864155f076
--- /dev/null
+++ b/src/client/directives/click-anime.ts
@@ -0,0 +1,22 @@
+import { Directive } from 'vue';
+
+export default {
+ mounted(el, binding, vn) {
+ el.addEventListener('mousedown', () => {
+ el.classList.add('_anime_bounce_ready');
+
+ el.addEventListener('mouseleave', () => {
+ el.classList.remove('_anime_bounce_ready');
+ });
+ });
+
+ el.addEventListener('click', () => {
+ el.classList.add('_anime_bounce');
+ });
+
+ el.addEventListener('animationend', () => {
+ el.classList.remove('_anime_bounce_ready');
+ el.classList.remove('_anime_bounce');
+ });
+ }
+} as Directive;
diff --git a/src/client/directives/index.ts b/src/client/directives/index.ts
index 6513350e0d..f0a0123771 100644
--- a/src/client/directives/index.ts
+++ b/src/client/directives/index.ts
@@ -8,6 +8,7 @@ import hotkey from './hotkey';
import appear from './appear';
import anim from './anim';
import stickyContainer from './sticky-container';
+import clickAnime from './click-anime';
export default function(app: App) {
app.directive('userPreview', userPreview);
@@ -18,5 +19,6 @@ export default function(app: App) {
app.directive('hotkey', hotkey);
app.directive('appear', appear);
app.directive('anim', anim);
+ app.directive('click-anime', clickAnime);
app.directive('sticky-container', stickyContainer);
}
diff --git a/src/client/style.scss b/src/client/style.scss
index ab8da9ccfa..7c9b9f06b0 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -520,3 +520,27 @@ hr {
transform: scale3d(1, 1, 1);
}
}
+
+._anime_bounce {
+ animation: bounce ease 1s;
+ animation-iteration-count: 1;
+ transform-origin: 50% 50%;
+}
+._anime_bounce_ready {
+ transform: scaleX(0.90) scaleY(0.90) ;
+}
+
+@keyframes bounce{
+ 0% {
+ transform: scaleX(0.90) scaleY(0.90) ;
+ }
+ 13% {
+ transform: scaleX(1.10) scaleY(1.10) ;
+ }
+ 35% {
+ transform: scaleX(0.95) scaleY(0.95) ;
+ }
+ 100% {
+ transform: scaleX(1.00) scaleY(1.00) ;
+ }
+}
diff --git a/src/client/ui/default.sidebar.vue b/src/client/ui/default.sidebar.vue
index b07914679d..a55a1770ff 100644
--- a/src/client/ui/default.sidebar.vue
+++ b/src/client/ui/default.sidebar.vue
@@ -1,6 +1,6 @@
<template>
<div class="npcljfve" :class="{ iconOnly }">
- <button class="item _button account" @click="openAccountMenu">
+ <button class="item _button account" @click="openAccountMenu" v-click-anime>
<MkAvatar :user="$i" class="avatar"/><MkAcct class="text" :user="$i"/>
</button>
<div class="post" @click="post">
@@ -9,25 +9,25 @@
</MkButton>
</div>
<div class="divider"></div>
- <MkA class="item index" active-class="active" to="/" exact>
+ <MkA class="item index" active-class="active" to="/" exact v-click-anime>
<i class="fas fa-home fa-fw"></i><span class="text">{{ $ts.timeline }}</span>
</MkA>
<template v-for="item in menu">
<div v-if="item === '-'" class="divider"></div>
- <component v-else-if="menuDef[item] && (menuDef[item].show !== false)" :is="menuDef[item].to ? 'MkA' : 'button'" class="item _button" :class="item" active-class="active" v-on="menuDef[item].action ? { click: menuDef[item].action } : {}" :to="menuDef[item].to">
+ <component v-else-if="menuDef[item] && (menuDef[item].show !== false)" :is="menuDef[item].to ? 'MkA' : 'button'" class="item _button" :class="item" active-class="active" v-on="menuDef[item].action ? { click: menuDef[item].action } : {}" :to="menuDef[item].to" v-click-anime>
<i class="fa-fw" :class="menuDef[item].icon"></i><span class="text">{{ $ts[menuDef[item].title] }}</span>
<span v-if="menuDef[item].indicated" class="indicator"><i class="fas fa-circle"></i></span>
</component>
</template>
<div class="divider"></div>
- <MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/instance" :behavior="settingsWindowed ? 'modalWindow' : null">
+ <MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/instance" :behavior="settingsWindowed ? 'modalWindow' : null" v-click-anime>
<i class="fas fa-server fa-fw"></i><span class="text">{{ $ts.instance }}</span>
</MkA>
- <button class="item _button" @click="more">
+ <button class="item _button" @click="more" v-click-anime>
<i class="fas fa-ellipsis-h fa-fw"></i><span class="text">{{ $ts.more }}</span>
<span v-if="otherNavItemIndicated" class="indicator"><i class="fas fa-circle"></i></span>
</button>
- <MkA class="item" active-class="active" to="/settings" :behavior="settingsWindowed ? 'modalWindow' : null">
+ <MkA class="item" active-class="active" to="/settings" :behavior="settingsWindowed ? 'modalWindow' : null" v-click-anime>
<i class="fas fa-cog fa-fw"></i><span class="text">{{ $ts.settings }}</span>
</MkA>
<div class="divider"></div>