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
Promise
bir de oluşturulur. İçeridePromise
, birsetTimeout
fonksiyon 2 saniyeye ayarlandı - Eylem tamamlandıktan sonra (iki saniye geçtikten sonra),
setTimeout
geri arama işlevini çalıştırır vetransition
yok olarak ayarlar . Bunu yaptıktan sonra , orijinal değerinesetTimeout
geri 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, transition
değ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 transitionend
neden bu oluyor? Ben açıkça ayarlanmış transition
sadece 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: