Please first of all i have to mention that i'm not very good on frontend but i spent a lot of time trying to solve this issue, so please don't be to hard with me.
This is my problem i'm using Vuejs with vuetify to create the frontend of a listing application.
The component i'm having issue with is supposed to list items horizontally by using the left and right arrows in the images below.
This is the code for the component
<template>
<div>
<v-layout class="mt-5">
<v-flex md8>
<h2 class="text-md-left ml-2">Place related to {{tagName}}</h2>
</v-flex>
<v-spacer></v-spacer>
<v-flex md4>
<h2 class="text-md-right">
<v-btn icon v-show="true" @click="nextLeft">
<v-icon>arrow_left</v-icon>
</v-btn>
<v-btn icon v-show="true" @click="nextRight">
<v-icon>arrow_right</v-icon>
</v-btn>
</h2>
</v-flex>
</v-layout>
<v-layout fluid>
<transition-group name="list-slide">
<v-flex xs12 md4 v-for="place in places" :key="place.id" class="list-slide-item" tag="div">
<v-card class="mr-2 ml-2 mt-2">
<v-card-media :src="place.picture" height="180px">
</v-card-media>
<v-card-title primary-title>
<div>
<h4 class="headline mb-0">{{ place.name }}</h4>
<div> {{ place.description }}</div>
</div>
</v-card-title>
<v-card-actions>
<v-btn flat color="teal">Share</v-btn>
<v-btn flat color="teal">Explore</v-btn>
</v-card-actions>
</v-card>
</v-flex>
</transition-group>
</v-layout>
</div>
</template>
<script>
export default {
props: ['tagName'],
data () {
return {
hasLeft: false, // True if there are some elements that are already been displayed
hasRight: true, // True if there are some elements to display in right
pageNumber: 1, // The page number on dataset we are currently on
bufferEnded: false, // While bufferEnded is True and fetching the API still returns results
places: [
{
name: 'Luna park obala',
id: 1,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ-yl-Ve7691Xp1ydOs8uxP78wt3xvfsJEVJt4vMe8FZMZHnUt6KQ'
},
{
name: 'Luna park obala',
id: 2,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT88qzjKE_X8nS97t-K4z10h6iOSBFjB4YRB_U2DtloUTtoaYpAtA'
},
{
name: 'Luna park obala',
id: 3,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTLFZUJQ62W_jdyuwpd9A7nqLlIgVgebgHxdaDDL9MF-ih9_p7L'
}
],
bufferLeft: [],
bufferRight: [
{
name: 'Luna park obala',
id: 4,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ-yl-Ve7691Xp1ydOs8uxP78wt3xvfsJEVJt4vMe8FZMZHnUt6KQ'
},
{
name: 'Luna park obala',
id: 5,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT88qzjKE_X8nS97t-K4z10h6iOSBFjB4YRB_U2DtloUTtoaYpAtA'
},
{
name: 'Luna park obala',
id: 6,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTLFZUJQ62W_jdyuwpd9A7nqLlIgVgebgHxdaDDL9MF-ih9_p7L'
},
{
name: 'Luna park obala',
id: 7,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTLFZUJQ62W_jdyuwpd9A7nqLlIgVgebgHxdaDDL9MF-ih9_p7L'
},
{
name: 'Luna park obala',
id: 8,
description: "Luna park dans la ville d'obala",
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTLFZUJQ62W_jdyuwpd9A7nqLlIgVgebgHxdaDDL9MF-ih9_p7L'
}
]
}
},
methods: {
nextRight: function () {
},
nextLeft: function () {
var previousFirstPlace = this.places.shift()
this.bufferLeft.push(previousFirstPlace)
var newLastPlace = this.bufferRight.shift()
this.places.push(newLastPlace)
}
}
}
</script>
<style>
.list-slide-item {
transition: all 1s;
display: inline-block;
}
.list-slide-enter, .list-slide-leave-to
/* .list-complete-leave-active below version 2.1.8 */ {
opacity: 0;
transform: translateX(-30px);
}
.list-slide-leave-active {
position: absolute;
}
</style>
The transition code works properly except that when transition is applied it update the size of the elements that are rendered
This is a picture of the listing without applying the transition (commenting tag)
This is the same picture after transition is applied
As you can see there is an offset to the right and images are resized down i don't know how to fix it.
transition-group renders the element by default so what I did was changed the tag to "div" and added "layout row wrap" to the transition-group class.