দয়া করে নীচের স্নিপেটটি চেষ্টা করে চালান, তারপরে বক্সে ক্লিক করুন।
const box = document.querySelector('.box')
box.addEventListener('click', e => {
if (!box.style.transform) {
box.style.transform = 'translateX(100px)'
new Promise(resolve => {
setTimeout(() => {
box.style.transition = 'none'
box.style.transform = ''
resolve('Transition complete')
}, 2000)
}).then(() => {
box.style.transition = ''
})
}
})
.box {
width: 100px;
height: 100px;
border-radius: 5px;
background-color: #121212;
transition: all 2s ease;
}
<div class = "box"></div>
আমি যা ঘটতে প্রত্যাশা করি:
- ক্লিক হয়
- বাক্সটি 100px দ্বারা অনুভূমিকভাবে অনুবাদ শুরু করে (এই ক্রিয়াটি দুই সেকেন্ড সময় নেয়)
- ক্লিক করার পরে, একটি নতুন তৈরিও
Promise
হয়। ভিতরে বলেছেনPromise
, একটিsetTimeout
ফাংশন 2 সেকেন্ডে সেট করা আছে - ক্রিয়াটি সম্পন্ন হওয়ার পরে (দুই সেকেন্ড সময় কেটে গেছে),
setTimeout
এর কলব্যাক ফাংশনটি চালায় এবং কোনওটিতে সেটtransition
করা নেই। এটি করার পরে, এটির আসলsetTimeout
মানটিতেও ফিরে আসেtransform
, এইভাবে বাক্সটি আসল অবস্থানে উপস্থিত হয়। - বাক্সটি এখানে কোনও স্থানান্তর প্রভাবের সমস্যা ছাড়াই মূল স্থানে উপস্থিত হবে
- এই সমস্ত সমাপ্তির পরে,
transition
বাক্সটির মানটিকে তার মূল মূল্যে সেট করুন
তবে, যেমন দেখা যায়, চলমান অবস্থায় transition
মানটি মনে হয় না none
। আমি জানি যে উপরোক্ত অর্জনের জন্য অন্যান্য পদ্ধতি রয়েছে, উদাহরণস্বরূপ কীফ্রেম ব্যবহার করা এবং transitionend
তবে কেন এটি ঘটে? আমি স্পষ্টভাবে সেট transition
তার মূল মান ফিরে শুধুমাত্র পরsetTimeout
তার কলব্যাক শেষ, এইভাবে প্রতিশ্রুতি সমাধানে।
সম্পাদনা
অনুরোধ অনুসারে, কোডযুক্ত একটি জিআইএফ সমস্যাযুক্ত আচরণ প্রদর্শন করছে: