diff --git a/assets/variables.scss b/assets/variables.scss index 95415b9..a5b23c2 100644 --- a/assets/variables.scss +++ b/assets/variables.scss @@ -47,3 +47,26 @@ p a { color: rgb(var(--v-theme-primary)); } } + +.slide-left-enter-active, +.slide-left-leave-active, +.slide-right-enter-active, +.slide-right-leave-active { + transition: all 0.2s; +} +.slide-left-enter-from { + opacity: 0; + transform: translate(50px, 0); +} +.slide-left-leave-to { + opacity: 0; + transform: translate(-50px, 0); +} +.slide-right-enter-from { + opacity: 0; + transform: translate(-50px, 0); +} +.slide-right-leave-to { + opacity: 0; + transform: translate(50px, 0); +} \ No newline at end of file diff --git a/middleware/transition.global.ts b/middleware/transition.global.ts new file mode 100644 index 0000000..0893c17 --- /dev/null +++ b/middleware/transition.global.ts @@ -0,0 +1,8 @@ +export default defineNuxtRouteMiddleware((to, from) => { + if (typeof to.meta.pageTransition === 'object' && typeof from.meta.pageTransition === 'object') { + if (typeof to.meta.id !== 'number' || typeof from.meta.id !== 'number') return + + const transition = to.meta.id > from.meta.id ? 'slide-left' : 'slide-right' + to.meta.pageTransition.name = from.meta.pageTransition.name = transition + } +}) \ No newline at end of file diff --git a/pages/bio.vue b/pages/bio.vue index c857a6c..5de95d3 100644 --- a/pages/bio.vue +++ b/pages/bio.vue @@ -59,6 +59,14 @@ diff --git a/pages/index.vue b/pages/index.vue index 28e32af..442f43b 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -31,6 +31,14 @@