Challenge'ın ikinci gününde JS ve CSS kullanarak analog bir saat hazırlamamız gerekiyor. Projenin demosuna buradan erişebilirsiniz.
Başlangıç dosyalarını bulabileceğiniz repom: js-30 | github
1. CSS ile çubukları hareket ettirmek
Her akrep, yelkovan ve saniye çubuklarını doğru pozisyona getirmek için transform:rotate() özelliği kullanılabilir. Ancak bu özelliği kullandığımızda varsayılan olarak çubuk tam ortasından döndürülür, bunun yerine en sonundan döndürülmesi için transform-origin değerini 100% yapmalıyız.
Dolayısıyla akrep, yelkovan ve saniye çubuğu tarafından kullanılan .hand sınıfını şu şekilde güncelleyelim:
2. JS ile her saniye çubukları doğru pozisyona getirmek
JS tarafında her çubuğu seçip, her saniye doğru açıda olmalarını sağlamamız gerekiyor :
Saatin doğru bir şekilde hareket ettiğini görebilirsiniz:
3.cubic-bezier ile daha gerçekçi bir animasyon
Çubukların açısı değiştiğinde ani bir şekilde güncelleniyor. Bu geçişi gerçekci yapmak için internetten bulduğum cubic-bezier'i ekliyorum.
Yukarıdaki gibi gerçekçi bir geçiş sağlanıyor. ANCAK saniye 0 olduğunda animasyonun bozulduğunu görüyoruz. Bunun sebebi:
Saniye 59 iken açımız (59/ 60) * 360 + 90 = 444
Saniye 0 olduğu anda açımız (0/60) * 360 + 90 = 90 oluyor ve eklediğimiz transition yüzünden 0.3 saniye içinde çubuğun 444deg -> 90deg arasındaki geçişini görüyoruz.
Bunu engellemek için JS tarafında şunları eklememiz yeterli olacaktır:
Bu projeden öğrendiklerim
transform-origin ile CSS'de gerçekleştirilen transformların nereden başlanacağı belirlenebilir ve varsayılan olarak 50%'dir.