JSFiddle - React, Tailwind, and code Playground
by kurotanshi
HTML
<script src="https://unpkg.com/vue@next"></script>
<div id="app">
<button @click="add">Generates a random number</button>
<button @click="list.length = 0">Remove all</button>
<transition-group tag="ul" class="number-list" name="list">
<li v-for="(item, index) in list" :key="item" class="item">{{ item }}</li>
</transition-group>
</div>
SCSS
#app {
position: relative;
display: block;
padding: 1rem;
font-size: 1rem;
}
button {
font-size: 1rem;
margin-bottom: 1rem;
margin-right: 1rem;
}
.number-list {
overflow: hidden;
padding: 0;
margin-bottom: 1.5rem;
> li {
display: block;
float: left;
width: 35px;
height: 35px;
text-align: center;
line-height: 35px;
background-color: #f00;
color: #fff;
margin-right: 1rem;
margin-left: 0;
margin-bottom: 1rem;
}
}
.list-enter-active,
.list-leave-active,
.list-move {
transition: opacity 0.7s, transform 0.7s;
}
.list-leave-active {
position: absolute;
}
.list-enter-from {
opacity: 0;
transform: translateY(-20px);
}
.list-leave-to {
opacity: 0;
transform: translateY(20px);
}
JavaScript
const app = Vue.createApp({
data() {
return {
list: [1, 2, 3, 4, 5]
}
},
methods: {
add() {
const randomNumber = Math.ceil(Math.random() * 100) + 1;
this.list.push(randomNumber);
},
pop(){
this.list.shift()
}
},
mounted() {
window.setInterval(() => {
this.add();
window.setTimeout(this.pop, 500);
}, 3000);
}
});
app.mount('#app');