diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-02-25 23:31:41 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-02-25 23:31:41 +0900 |
| commit | 157316088e5704b7133d137e704c12eecbbfe1e0 (patch) | |
| tree | c89191ed95a2ab55e2eeec3e9788d034ba089f41 /src/web/app | |
| parent | #1145 (diff) | |
| download | sharkey-157316088e5704b7133d137e704c12eecbbfe1e0.tar.gz sharkey-157316088e5704b7133d137e704c12eecbbfe1e0.tar.bz2 sharkey-157316088e5704b7133d137e704c12eecbbfe1e0.zip | |
:v:
Diffstat (limited to 'src/web/app')
| -rw-r--r-- | src/web/app/desktop/views/components/ui.header.vue | 90 | ||||
| -rw-r--r-- | src/web/app/mobile/views/components/ui.header.vue | 66 |
2 files changed, 139 insertions, 17 deletions
diff --git a/src/web/app/desktop/views/components/ui.header.vue b/src/web/app/desktop/views/components/ui.header.vue index 99de05facb..22239ecd7f 100644 --- a/src/web/app/desktop/views/components/ui.header.vue +++ b/src/web/app/desktop/views/components/ui.header.vue @@ -1,10 +1,11 @@ <template> <div class="header"> <mk-special-message/> - <div class="main"> + <div class="main" ref="main"> <div class="backdrop"></div> <div class="main"> - <div class="container"> + <p ref="welcomeback" v-if="os.isSignedIn">おかえりなさい、<b>{{ os.i.name }}</b>さん</p> + <div class="container" ref="mainContainer"> <div class="left"> <x-nav/> </div> @@ -23,6 +24,7 @@ <script lang="ts"> import Vue from 'vue'; +import * as anime from 'animejs'; import XNav from './ui.header.nav.vue'; import XSearch from './ui.header.search.vue'; @@ -39,6 +41,53 @@ export default Vue.extend({ XNotifications, XPost, XClock, + }, + mounted() { + if ((this as any).os.isSignedIn) { + const ago = (new Date().getTime() - new Date((this as any).os.i.last_used_at).getTime()) / 1000 + const isHisasiburi = ago >= 3600; + if (isHisasiburi) { + (this.$refs.main as any).style.overflow = 'hidden'; + + anime({ + targets: this.$refs.welcomeback, + top: '0', + opacity: 1, + delay: 1000, + duration: 500, + easing: 'easeOutQuad' + }); + + anime({ + targets: this.$refs.mainContainer, + opacity: 0, + delay: 1000, + duration: 500, + easing: 'easeOutQuad' + }); + + setTimeout(() => { + anime({ + targets: this.$refs.welcomeback, + top: '-48px', + opacity: 0, + duration: 500, + complete: () => { + (this.$refs.welcomeback as any).style.display = 'none'; + (this.$refs.main as any).style.overflow = 'initial'; + }, + easing: 'easeInQuad' + }); + + anime({ + targets: this.$refs.mainContainer, + opacity: 1, + duration: 500, + easing: 'easeInQuad' + }); + }, 2000); + } + } } }); </script> @@ -53,6 +102,7 @@ export default Vue.extend({ box-shadow 0 1px 1px rgba(0, 0, 0, 0.075) > .main + height 48px > .backdrop position absolute @@ -63,17 +113,6 @@ export default Vue.extend({ backdrop-filter blur(12px) background #f7f7f7 - &:after - content "" - display block - width 100% - height 48px - background-image url(/assets/desktop/header-logo.svg) - background-size 46px - background-position center - background-repeat no-repeat - opacity 0.3 - > .main z-index 1024 margin 0 @@ -82,12 +121,37 @@ export default Vue.extend({ font-size 0.9rem user-select none + > p + display block + position absolute + top 48px + width 100% + line-height 48px + margin 0 + text-align center + color #888 + opacity 0 + > .container display flex width 100% max-width 1300px margin 0 auto + &:before + content "" + position absolute + top 0 + left 0 + display block + width 100% + height 48px + background-image url(/assets/desktop/header-logo.svg) + background-size 46px + background-position center + background-repeat no-repeat + opacity 0.3 + > .left margin 0 auto 0 0 height 48px diff --git a/src/web/app/mobile/views/components/ui.header.vue b/src/web/app/mobile/views/components/ui.header.vue index 026e7eb1b4..ad7e9ace6d 100644 --- a/src/web/app/mobile/views/components/ui.header.vue +++ b/src/web/app/mobile/views/components/ui.header.vue @@ -1,9 +1,10 @@ <template> <div class="header"> <mk-special-message/> - <div class="main"> + <div class="main" ref="main"> <div class="backdrop"></div> - <div class="content"> + <p ref="welcomeback" v-if="os.isSignedIn">おかえりなさい、<b>{{ os.i.name }}</b>さん</p> + <div class="content" ref="mainContainer"> <button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button> <template v-if="hasUnreadNotifications || hasUnreadMessagingMessages">%fa:circle%</template> <h1> @@ -17,6 +18,7 @@ <script lang="ts"> import Vue from 'vue'; +import * as anime from 'animejs'; export default Vue.extend({ props: ['func'], @@ -51,6 +53,50 @@ export default Vue.extend({ this.hasUnreadMessagingMessages = true; } }); + + const ago = (new Date().getTime() - new Date((this as any).os.i.last_used_at).getTime()) / 1000 + const isHisasiburi = ago >= 3600; + if (isHisasiburi) { + (this.$refs.main as any).style.overflow = 'hidden'; + + anime({ + targets: this.$refs.welcomeback, + top: '0', + opacity: 1, + delay: 1000, + duration: 500, + easing: 'easeOutQuad' + }); + + anime({ + targets: this.$refs.mainContainer, + opacity: 0, + delay: 1000, + duration: 500, + easing: 'easeOutQuad' + }); + + setTimeout(() => { + anime({ + targets: this.$refs.welcomeback, + top: '-48px', + opacity: 0, + duration: 500, + complete: () => { + (this.$refs.welcomeback as any).style.display = 'none'; + (this.$refs.main as any).style.overflow = 'initial'; + }, + easing: 'easeInQuad' + }); + + anime({ + targets: this.$refs.mainContainer, + opacity: 1, + duration: 500, + easing: 'easeInQuad' + }); + }, 2000); + } } }, beforeDestroy() { @@ -95,15 +141,27 @@ export default Vue.extend({ > .backdrop position absolute top 0 - z-index 1023 + z-index 1000 width 100% height $height -webkit-backdrop-filter blur(12px) backdrop-filter blur(12px) background-color rgba(#1b2023, 0.75) + > p + display block + position absolute + z-index 1002 + top $height + width 100% + line-height $height + margin 0 + text-align center + color #fff + opacity 0 + > .content - z-index 1024 + z-index 1001 > h1 display block |