WL-25 Add transition on grid items

This commit is contained in:
2020-10-28 18:55:46 +01:00
parent 9cb509021b
commit 4ae25d7698
2 changed files with 60 additions and 38 deletions

View File

@@ -1,44 +1,47 @@
<template> <template>
<div id="projects" class="container mx-auto p-8 sm:p-16"> <div id="projects" class="container mx-auto p-8 sm:p-16">
<h2 class="text-4xl mb-6">Projects</h2> <h2 class="text-4xl mb-6">Projects</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Filters Nav -->
<ul class="flex col-span-1 md:col-span-2 lg:col-span-3">
<li class="mr-3">
<button
:class="'btn ' + (filter === 'all' ? 'btn-active' : 'btn-ghost')"
@click="() => (filter = 'all')"
>
All
</button>
</li>
<li class="mr-3">
<button
:class="
'btn ' + (filter === 'freelance' ? 'btn-active' : 'btn-ghost')
"
@click="filter = 'freelance'"
>
Freelance
</button>
</li>
<li class="mr-3">
<button
:class="
'btn ' + (filter === 'company' ? 'btn-active' : 'btn-ghost')
"
@click="() => (filter = 'company')"
>
Company
</button>
</li>
</ul>
<!-- Grid --> <!-- Filters Nav -->
<ul class="flex mb-8">
<li class="mr-3">
<button
:class="'btn ' + (filter === 'all' ? 'btn-active' : 'btn-ghost')"
@click="() => (filter = 'all')"
>
All
</button>
</li>
<li class="mr-3">
<button
:class="
'btn ' + (filter === 'freelance' ? 'btn-active' : 'btn-ghost')
"
@click="filter = 'freelance'"
>
Freelance
</button>
</li>
<li class="mr-3">
<button
:class="'btn ' + (filter === 'company' ? 'btn-active' : 'btn-ghost')"
@click="() => (filter = 'company')"
>
Company
</button>
</li>
</ul>
<!-- Grid -->
<transition-group
name="flip-grid"
tag="div"
class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"
>
<div <div
:key="index" :key="project.title"
v-for="(project, index) in filteredData" v-for="project in filteredData"
class="max-w-sm rounded overflow-hidden shadow-lg hover:shadow-2xl transition-shadow duration-300 ease-in-out" class="grid-item max-w-sm rounded overflow-hidden shadow-lg hover:shadow-2xl transition-shadow duration-300 ease-in-out"
> >
<a <a
class="block h-full" class="block h-full"
@@ -71,19 +74,20 @@
</div> </div>
</a> </a>
</div> </div>
</div> </transition-group>
</div> </div>
</template> </template>
<script> <script>
import projects from "../content/projects.json"; import projects from "../content/projects.json";
import { shuffle } from "lodash";
export default { export default {
computed: { computed: {
filteredData() { filteredData() {
if (this.filter === "all") return this.data; if (this.filter === "all") return this.data;
return this.data.filter(o => o.type === this.filter); return shuffle(this.data.filter(o => o.type === this.filter));
} }
}, },
data() { data() {
@@ -91,6 +95,9 @@ export default {
data: projects, data: projects,
filter: "all" filter: "all"
}; };
},
mounted() {
this.data = shuffle(this.data);
} }
}; };
</script> </script>
@@ -101,6 +108,20 @@ export default {
object-fit: cover; object-fit: cover;
} }
.grid-item {
transition: all 1s;
}
.flip-grid-enter,
.flip-grid-leave-to {
opacity: 0;
transform: translateY(30px);
}
.flip-grid-leave-active {
position: absolute;
}
.btn { .btn {
@apply inline-block border rounded py-1 px-3; @apply inline-block border rounded py-1 px-3;
} }

View File

@@ -12,6 +12,7 @@
"dependencies": { "dependencies": {
"axios": "^0.21.0", "axios": "^0.21.0",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"lodash": "^4.17.20",
"nuxt": "^2.14.6" "nuxt": "^2.14.6"
}, },
"devDependencies": { "devDependencies": {