V-এর সাথে Vue অ্যানিমেশন
Vue-তে অন্তর্নির্মিত <TransitionGroup> উপাদানটি আমাদের v-for দিয়ে আমাদের পৃষ্ঠায় যোগ করা উপাদানগুলিকে অ্যানিমেট করতে সাহায্য করে।
<TransitionGroup> উপাদান
<TransitionGroup> উপাদানটি v-for দিয়ে তৈরি উপাদানগুলির চারপাশে ব্যবহৃত হয় যখন এই উপাদানগুলি যোগ করা হয় বা সরানো হয় তখন পৃথক অ্যানিমেশন প্রদান করতে।
<TransitionGroup> কম্পোনেন্টের ভিতরে v-এর সাহায্যে তৈরি করা ট্যাগগুলিকে অবশ্যই কী অ্যাট্রিবিউট দিয়ে সংজ্ঞায়িত করতে হবে।
<TransitionGroup> উপাদানটি একটি HTML ট্যাগ হিসাবে রেন্ডার করা হয় যদি এটি ট্যাগ প্রপ ব্যবহার করে একটি নির্দিষ্ট ট্যাগ হিসাবে সংজ্ঞায়িত করা হয়, যেমন:
<TransitionGroup tag="ol">
<li v-for="x in products" :key="x">
{{ x }}
</li>
</TransitionGroup>
Vue দ্বারা রেন্ডার করার পরে উপরের কোডের ফলাফল:
<ol>
<li>Apple</li>
<li>Pizza</li>
<li>Rice</li>
</ol>
এখন আমরা নতুন আইটেমগুলিকে তালিকায় যোগ করার সময় অ্যানিমেট করার জন্য CSS কোড যোগ করতে পারি:
<style>
.v-enter-from {
opacity: 0;
rotate: 180deg;
}
.v-enter-to {
opacity: 1;
rotate: 0deg;
}
.v-enter-active {
transition: all 0.7s;
}
</style>
উদাহরণ
এই উদাহরণে, নতুন আইটেমগুলিকে 'পণ্য' অ্যারেতে যোগ করে অ্যানিমেটেড করা হয়:
আপনার নিজস্ব Vue সার্ভার পান
<template>
<h3>The <TransitionGroup> Component</h3>
<p>New products are given animations using the <TransitionGroup> component.</p>
<input type="text" v-model="inpName">
<button @click="addEl">Add</button>
<TransitionGroup tag="ol">
<li v-for="x in products" :key="x">
{{ x }}
</li>
</TransitionGroup>
</template>
<script>
export default {
data() {
return {
products: ['Apple','Pizza','Rice'],
inpName: ''
}
},
methods: {
addEl() {
const el = this.inpName;
this.products.push(el);
this.inpName = null;
}
}
}
</script>
<style>
.v-enter-from {
opacity: 0;
rotate: 180deg;
}
.v-enter-to {
opacity: 1;
rotate: 0deg;
}
.v-enter-active {
transition: all 0.7s;
}
</style>
উপাদান সংযোজন এবং মুছে ফেলা
অন্যান্য উপাদানগুলির মধ্যে উপাদানগুলি সরানোর সময়, অন্যান্য উপাদানগুলি সরানো উপাদানটির অবস্থানে পৌঁছায়। একটি উপাদান সরানো হলে তালিকার অবশিষ্ট আইটেমগুলি কীভাবে নতুন অবস্থানে চলে যায় তা অ্যানিমেট করতে আমরা স্বয়ংক্রিয়ভাবে তৈরি করা v-মুভ ক্লাস ব্যবহার করব৷
কিন্তু প্রথমে, আসুন একটি নন-অ্যানিমেটেড উদাহরণ দেখি কিভাবে অন্যান্য আইটেমগুলি যখন একটি উপাদান সরানো হয় তখন নতুন অবস্থানে চলে যায়:
উদাহরণ
<template>
<h3>The <TransitionGroup> Component</h3>
<p>New products are given animations using the <TransitionGroup> component.</p>
<button @click="addDie">Roll</button>
<button @click="removeDie">Remove random</button><br>
<TransitionGroup>
<div v-for="x in dice" :key="x" class="diceDiv" :style="{ backgroundColor: 'hsl('+x*40+',85%,85%)' }">
{{ x }}
</div>
</TransitionGroup>
</template>
<script>
export default {
data() {
return {
dice: [],
inpName: ''
}
},
methods: {
addDie() {
const newDie = Math.ceil(Math.random()*6);
this.dice.push(newDie);
},
removeDie() {
if(this.dice.length>0){
this.dice.splice(Math.floor(Math.random()*this.dice.length), 1);
}
}
},
mounted() {
this.addDie();
this.addDie();
this.addDie();
}
}
</script>
<style>
.v-enter-from {
opacity: 0;
translate: 200px 0;
rotate: 360deg;
}
.v-enter-to {
opacity: 1;
translate: 0 0;
rotate: 0deg;
}
.v-enter-active,
.v-leave-active {
transition: all 0.7s;
}
.v-leave-from { opacity: 1; }
.v-leave-to { opacity: 0; }
.diceDiv {
margin: 10px;
width: 30px;
height: 30px;
line-height: 30px;
vertical-align: middle;
text-align: center;
border: solid black 1px;
border-radius: 5px;
display: inline-block;
}
</style>
আপনি উপরের উদাহরণে দেখতে পাচ্ছেন, যখন একটি আইটেম সরানো হয়, সরানো আইটেম অনুসরণ করা আইটেমগুলি হঠাৎ করে তাদের নতুন অবস্থানে চলে যায়। যখন একটি আইটেম সরানো হয় তখন অবশিষ্ট আইটেমগুলিকে অ্যানিমেট করতে আমরা স্বয়ংক্রিয়ভাবে তৈরি করা ভি-মুভ ক্লাস ব্যবহার করি।
সরানো আইটেমটি চলে গেলে v-move ক্লাস অন্যান্য উপাদানগুলিকে অ্যানিমেট করে, কিন্তু একটি সমস্যা আছে: সরানো আইটেমটি এখনও বিদ্যমান এবং অপসারণ না হওয়া পর্যন্ত স্থান নেয়, তাই v-move ক্লাসের কোন প্রভাব নেই। v-move ক্লাসকে অ্যানিমেট করার জন্য কিছু দিতে, v-leave-active ক্লাসের অবস্থান রয়েছে: পরম; সেট করা যেতে পারে। অবস্থান: পরম; মুছে ফেলার সময় সেট করা থাকলে, সরানো আইটেমটি এখনও দৃশ্যমান হবে, কিন্তু স্থান দখল করবে না।
এই উদাহরণে, আগের উদাহরণ থেকে শুধুমাত্র পার্থক্য হল দুটি নতুন CSS ক্লাস 14 এবং 17 লাইনে যোগ করা হয়েছে:
উদাহরণ
<style>
.v-enter-from {
opacity: 0;
translate: 200px 0;
rotate: 360deg;
}
.v-enter-to {
opacity: 1;
translate: 0 0;
rotate: 0deg;
}
.v-enter-active,
.v-leave-active,
.v-move {
transition: all 0.7s;
}
.v-leave-active { position: absolute; }
.v-leave-from { opacity: 1; }
.v-leave-to { opacity: 0; }
.diceDiv {
margin: 10px;
width: 30px;
height: 30px;
line-height: 30px;
vertical-align: middle;
text-align: center;
border: solid black 1px;
border-radius: 5px;
display: inline-block;
}
</style>
একটি মহান উদাহরণ
আসুন একটি নতুন উদাহরণের ভিত্তি হিসাবে উপরের উদাহরণটি ব্যবহার করি।
এই উদাহরণে, একটি নতুন আইটেম যোগ বা সরানো হলে বা সম্পূর্ণ অ্যারে সাজানো হলে সম্পূর্ণ তালিকা কীভাবে অ্যানিমেটেড হয় তা আরও স্পষ্ট।
এই উদাহরণে আমরা করতে পারি:
- তাদের উপর ক্লিক করে আইটেম সরান
- আইটেম সাজান
- এলোমেলো অবস্থানে তালিকায় নতুন আইটেম যোগ করুন
উদাহরণ
<template>
<h3>The <TransitionGroup> Component</h3>
<p>Items inside the <TransitionGroup> component are animated when they are created or removed.</p>
<button @click="addDie">Roll</button>
<button @click="addDie10">Roll 10 dice</button>
<button @click="dice.sort(compareFunc)">Sort</button>
<button @click="dice.sort(shuffleFunc)">Shuffle</button><br>
<TransitionGroup>
<div
v-for="x in dice"
:key="x.keyNmbr"
class="diceDiv"
:style="{ backgroundColor: 'hsl('+x.dieNmbr*60+',85%,85%)' }"
@click="removeDie(x.keyNmbr)">
{{ x.dieNmbr }}
</div>
</TransitionGroup>
</template>
<script>
export default {
data() {
return {
dice: [],
keyNumber: 0
}
},
methods: {
addDie() {
const newDie = {
dieNmbr: Math.ceil(Math.random()*6),
keyNmbr: this.keyNumber
};
this.dice.splice(Math.floor(Math.random()*this.dice.length),0,newDie);
this.keyNumber++;
},
addDie10() {
for(let i=0; i<10; i++) {
this.addDie();
}
},
compareFunc(a,b){
return a.dieNmbr - b.dieNmbr;
},
shuffleFunc(a,b){
return Math.random()-0.5;
},
removeDie(key) {
const pos = this.dice.map(e => e.keyNmbr).indexOf(key);
this.dice.splice(pos, 1);
}
},
mounted() {
this.addDie10();
}
}
</script>
<style>
.v-enter-from {
opacity: 0;
scale: 0;
rotate: 360deg;
}
.v-enter-to {
opacity: 1;
scale: 1;
rotate: 0deg;
}
.v-enter-active,
.v-leave-active,
.v-move {
transition: all 0.7s;
}
.v-leave-active { position: absolute; }
.v-leave-from { opacity: 1; }
.v-leave-to { opacity: 0; }
.diceDiv {
margin: 10px;
width: 30px;
height: 30px;
line-height: 30px;
vertical-align: middle;
text-align: center;
border: solid black 1px;
border-radius: 5px;
display: inline-block;
}
.diceDiv:hover {
cursor: pointer;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
#app {
position: relative;
}
</style>
ভিউ টিউটোরিয়াল
ব্যায়াম দিয়ে নিজেকে পরীক্ষা করুন
প্রশিক্ষণ:
V-for দিয়ে তৈরি বা সরানো উপাদানগুলিকে অ্যানিমেট করতে ব্যবহৃত Vue নির্দিষ্ট উপাদানটির নাম কী?
<______ tag="ol">
<li v-for="x in products" :key="x">
{{ x }}
</li>
</______>