দয়া করে নীচের স্নিপেটটি চেষ্টা করে চালান, তারপরে বক্সে ক্লিক করুন।
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 তার কলব্যাক শেষ, এইভাবে প্রতিশ্রুতি সমাধানে।
সম্পাদনা
অনুরোধ অনুসারে, কোডযুক্ত একটি জিআইএফ সমস্যাযুক্ত আচরণ প্রদর্শন করছে:
