Skip to content

Commit 8994c5b

Browse files
author
reco_luan
committed
feat: Add component & optimization
1. Project optimization 2. Add module loading animation component
1 parent 742e212 commit 8994c5b

26 files changed

+218
-194
lines changed

components/Common.vue

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,11 @@
7676
<script>
7777
import Navbar from '@theme/components/Navbar.vue'
7878
import Sidebar from '@theme/components/Sidebar.vue'
79-
import { resolveSidebarItems } from '../util'
79+
import { resolveSidebarItems } from '@theme/helpers/utils'
8080
import Password from '@theme/components/Password'
8181
import { setTimeout } from 'timers'
82-
import mixin from '@theme/mixins/index.js'
8382
8483
export default {
85-
mixins: [mixin],
8684
components: { Sidebar, Navbar, Password },
8785
8886
props: {

components/FriendLink.vue

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,9 @@
4242

4343
<script>
4444
import md5 from 'md5'
45-
import mixin from '@theme/mixins/index.js'
45+
import { getOneColor } from '@theme/helpers/other'
4646
4747
export default {
48-
mixins: [mixin],
4948
data () {
5049
return {
5150
popupWindowStyle: {}
@@ -57,7 +56,7 @@ export default {
5756
if (friendLink && friendLink.length > 0) {
5857
friendLink = friendLink.map(item => ({
5958
...item,
60-
color: this._tagColor()
59+
color: getOneColor()
6160
}))
6261
return friendLink
6362
}

components/Home.vue

Lines changed: 89 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,52 @@
11
<template>
2-
<div class="home" :class="recoShow?'reco-show': 'reco-hide'">
2+
<div class="home">
33
<div class="hero">
4-
<img
5-
v-if="data.isShowHeroImage !== false"
6-
:style="heroImageStyle"
7-
:src="data.heroImage ? $withBase(data.heroImage) : require('../images/icon_vuepress_reco.png')"
8-
alt="hero">
9-
10-
<h1 v-if="data.isShowTitleInHome !== false">{{ data.heroText || $title || '午后南杂' }}</h1>
11-
12-
<p class="description">{{ $description || 'Welcome to your vuePress-theme-reco site' }}</p>
13-
<p class="huawei" v-if="$themeConfig.huawei === true">
14-
<i class="iconfont reco-huawei" style="color: #fc2d38"></i>
15-
&nbsp;&nbsp;&nbsp;华为,为中华而为之!
16-
</p>
17-
18-
<p class="action" v-if="data.actionText && data.actionLink">
19-
<NavLink class="action-button" :item="actionLink"/>
20-
</p>
4+
<ModuleTransition delay="0.08">
5+
<img
6+
v-if="data.isShowHeroImage !== false && recoShowMoudle"
7+
:style="heroImageStyle"
8+
:src="data.heroImage ? $withBase(data.heroImage) : require('../images/icon_vuepress_reco.png')"
9+
alt="hero">
10+
</ModuleTransition>
11+
<ModuleTransition delay="0.16">
12+
<h1 v-if="data.isShowTitleInHome !== false && recoShowMoudle">{{ data.heroText || $title || '午后南杂' }}</h1>
13+
</ModuleTransition>
14+
<ModuleTransition delay="0.24">
15+
<p v-if="recoShowMoudle" class="description">{{ $description || 'Welcome to your vuePress-theme-reco site' }}</p>
16+
</ModuleTransition>
17+
<ModuleTransition delay="0.32">
18+
<p class="huawei" v-if="$themeConfig.huawei === true && recoShowMoudle">
19+
<i class="iconfont reco-huawei" style="color: #fc2d38"></i>
20+
&nbsp;&nbsp;&nbsp;华为,为中华而为之!
21+
</p>
22+
</ModuleTransition>
23+
<ModuleTransition delay="0.4">
24+
<p class="action" v-if="data.actionText && data.actionLink && recoShowMoudle">
25+
<NavLink class="action-button" :item="actionLink"/>
26+
</p>
27+
</ModuleTransition>
2128
</div>
2229

23-
<div class="features" v-if="data.features && data.features.length">
24-
<div v-for="(feature, index) in data.features" :key="index" class="feature">
25-
<h2>{{ feature.title }}</h2>
26-
<p>{{ feature.details }}</p>
30+
<ModuleTransition delay="0.4">
31+
<div class="features" v-if="data.features && data.features.length && recoShowMoudle">
32+
<div v-for="(feature, index) in data.features" :key="index" class="feature">
33+
<h2>{{ feature.title }}</h2>
34+
<p>{{ feature.details }}</p>
35+
</div>
2736
</div>
28-
</div>
29-
30-
<Content class="home-center" custom/>
37+
</ModuleTransition>
38+
<ModuleTransition delay="0.48">
39+
<Content class="home-center" v-if="recoShowMoudle" custom/>
40+
</ModuleTransition>
3141
</div>
3242
</template>
3343

3444
<script>
3545
import NavLink from '@theme/components/NavLink.vue'
46+
import ModuleTransition from '@theme/components/ModuleTransition.vue'
3647
3748
export default {
38-
components: { NavLink },
39-
data () {
40-
return {
41-
recoShow: false
42-
}
43-
},
49+
components: { NavLink, ModuleTransition },
4450
computed: {
4551
data () {
4652
return this.$frontmatter
@@ -59,16 +65,12 @@ export default {
5965
margin: '6rem auto 1.5rem'
6066
}
6167
}
62-
},
63-
mounted () {
64-
this.recoShow = true
6568
}
6669
}
6770
</script>
6871

6972
<style lang="stylus">
7073
@require '../styles/mode.styl'
71-
@require '../styles/loadMixin.styl'
7274
7375
.home {
7476
padding: $navbarHeight 2rem 0;
@@ -138,58 +140,58 @@ export default {
138140
}
139141
}
140142
141-
&.reco-hide {
142-
.hero {
143-
img {
144-
load-start()
145-
}
146-
.h1 {
147-
load-start()
148-
}
149-
.description {
150-
load-start()
151-
}
152-
.huawei {
153-
load-start()
154-
}
155-
.action-button {
156-
load-start()
157-
}
158-
}
159-
.features {
160-
load-start()
161-
}
162-
.home-center {
163-
load-start()
164-
padding 0
165-
}
166-
}
167-
168-
&.reco-show {
169-
.hero {
170-
img {
171-
load-end(0.08s)
172-
}
173-
.h1 {
174-
load-end(0.16s)
175-
}
176-
.description {
177-
load-end(0.24s)
178-
}
179-
.huawei {
180-
load-end(0.32s)
181-
}
182-
.action-button {
183-
load-end(0.4s)
184-
}
185-
}
186-
.features {
187-
load-end(0.40s)
188-
}
189-
.home-center {
190-
load-end(0.48s)
191-
}
192-
}
143+
// &.reco-hide {
144+
// .hero {
145+
// img {
146+
// load-start()
147+
// }
148+
// .h1 {
149+
// load-start()
150+
// }
151+
// .description {
152+
// load-start()
153+
// }
154+
// .huawei {
155+
// load-start()
156+
// }
157+
// .action-button {
158+
// load-start()
159+
// }
160+
// }
161+
// .features {
162+
// load-start()
163+
// }
164+
// .home-center {
165+
// load-start()
166+
// padding 0
167+
// }
168+
// }
169+
170+
// &.reco-show {
171+
// .hero {
172+
// img {
173+
// load-end(0.08s)
174+
// }
175+
// .h1 {
176+
// load-end(0.16s)
177+
// }
178+
// .description {
179+
// load-end(0.24s)
180+
// }
181+
// .huawei {
182+
// load-end(0.32s)
183+
// }
184+
// .action-button {
185+
// load-end(0.4s)
186+
// }
187+
// }
188+
// .features {
189+
// load-end(0.40s)
190+
// }
191+
// .home-center {
192+
// load-end(0.48s)
193+
// }
194+
// }
193195
}
194196
195197
@media (max-width: $MQMobile) {

components/HomeBlog.vue

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<li class="category-item" v-for="(item, index) in this.$categories.list" :key="index">
4141
<router-link :to="item.path">
4242
<span class="category-name">{{ item.name }}</span>
43-
<span class="post-num" :style="{ 'backgroundColor': _tagColor() }">{{ item.pages.length }}</span>
43+
<span class="post-num" :style="{ 'backgroundColor': getOneColor() }">{{ item.pages.length }}</span>
4444
</router-link>
4545
</li>
4646
</ul>
@@ -60,10 +60,11 @@
6060
import TagList from '@theme/components/TagList.vue'
6161
import FriendLink from '@theme/components/FriendLink.vue'
6262
import NoteAbstract from '@theme/components/NoteAbstract.vue'
63-
import mixin from '@theme/mixins/index.js'
63+
import pagination from '@theme/mixins/pagination'
64+
import { getOneColor } from '@theme/helpers/other'
6465
6566
export default {
66-
mixins: [mixin],
67+
mixins: [pagination],
6768
components: { NoteAbstract, TagList, FriendLink },
6869
data () {
6970
return {
@@ -135,7 +136,8 @@ export default {
135136
this.currentPage = page
136137
this.$page.currentPage = page
137138
this._setStoragePage(page)
138-
}
139+
},
140+
getOneColor
139141
}
140142
}
141143
</script>

components/ModuleTransition.vue

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<template>
2+
<transition
3+
name="module"
4+
@enter="setStyle"
5+
@after-enter="unsetStyle"
6+
@before-leave="setStyle">
7+
<slot />
8+
</transition>
9+
</template>
10+
11+
<script>
12+
export default {
13+
name: 'ModuleTransition',
14+
15+
props: {
16+
delay: {
17+
type: String,
18+
default: '0'
19+
}
20+
},
21+
22+
methods: {
23+
setStyle (items) {
24+
items.style.transition = `all .25s ease-in ${this.delay}s`
25+
items.style.transform = 'translateY(-20px)'
26+
items.style.opacity = 0
27+
},
28+
unsetStyle (items) {
29+
items.style.transform = 'translateY(0)'
30+
items.style.opacity = 1
31+
}
32+
}
33+
}
34+
</script>
35+
36+
<style lang="stylus">
37+
.module-enter, .module-leave-to {
38+
opacity: 0;
39+
transform:translateY(-20px);
40+
}
41+
</style>

components/NavLink.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
</template>
2222

2323
<script>
24-
import { isExternal, isMailto, isTel, ensureExt } from '../util'
24+
import { isExternal, isMailto, isTel, ensureExt } from '@theme/helpers/utils'
2525
2626
export default {
2727
props: {

components/NavLinks.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
<script>
3434
import DropdownLink from '@theme/components/DropdownLink.vue'
35-
import { resolveNavLinkItem } from '../util'
35+
import { resolveNavLinkItem } from '@theme/helpers/utils'
3636
import NavLink from '@theme/components/NavLink.vue'
3737
3838
export default {

components/Page.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969

7070
<script>
7171
import PageInfo from '@theme/components/PageInfo'
72-
import { resolvePage, outboundRE, endingSlashRE } from '../util'
72+
import { resolvePage, outboundRE, endingSlashRE } from '@theme/helpers/utils'
7373
7474
export default {
7575
components: { PageInfo },

components/PageInfo.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<i
99
v-if="pageInfo.frontmatter.date"
1010
class="iconfont reco-date">
11-
<span>{{ pageInfo.frontmatter.date | formatDate }}</span>
11+
<span>{{ pageInfo.frontmatter.date | formatDateValue }}</span>
1212
</i>
1313
<i
1414
v-if="hideAccessNumber !== true"
@@ -34,7 +34,7 @@
3434

3535
<script>
3636
// 引入时间格式化js文件
37-
import { formatDate } from '@theme/util'
37+
import { formatDate } from '@theme/helpers/utils'
3838
3939
export default {
4040
// props: ['pageInfo', 'currentTag'],
@@ -64,7 +64,7 @@ export default {
6464
}
6565
},
6666
filters: {
67-
formatDate: function (value) {
67+
formatDateValue (value) {
6868
if (!value) return ''
6969
// 返回的value的值都是这个样子2019-09-20T18:22:30.000Z
7070
// 对value进行处理

components/SidebarGroup.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
</template>
5555

5656
<script>
57-
import { isActive } from '../util'
57+
import { isActive } from '@theme/helpers/utils'
5858
import DropdownTransition from '@theme/components/DropdownTransition.vue'
5959
6060
export default {

0 commit comments

Comments
 (0)