Lütfen aşağıdaki kod parçasını çalıştırmayı deneyin ve ardından kutuyu tıklayın.
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>
Ne olmasını bekliyorum:
- Tıklama olur
- Kutu yatay olarak 100 piksel çevirmeye başlar (bu işlem iki saniye sürer)
- Tıklandığında yeni
Promisebir de oluşturulur. İçeridePromise, birsetTimeoutfonksiyon 2 saniyeye ayarlandı - Eylem tamamlandıktan sonra (iki saniye geçtikten sonra),
setTimeoutgeri arama işlevini çalıştırır vetransitionyok olarak ayarlar . Bunu yaptıktan sonra , orijinal değerinesetTimeoutgeri dönertransform, böylece kutunun orijinal konumunda görünmesini sağlar. - Kutu, orijinal konumda burada geçiş etkisi sorunu olmadan görünür
- Bunların hepsi bittikten sonra
transition, kutunun değerini orijinal değerine geri ayarlayın
Ancak, görülebileceği gibi, transitiondeğer noneçalışırken görünmüyor . Yukarıdakileri başarmak için başka yöntemler olduğunu biliyorum, örneğin anahtar kare kullanma ve transitionendneden bu oluyor? Ben açıkça ayarlanmış transitionsadece orijinal değerine geri sonrasındasetTimeout böylece Promise çözme, onun geri arama bitirir.
DÜZENLE
İsteğe bağlı olarak, sorunlu davranışı gösteren kodun bir gif:
