挑戰 JS30 #2 - CSS + JS Clock

更新於 發佈於 閱讀時間約 5 分鐘

本次的挑戰是「CSS + JS Clock」,需要達成的目標是:

「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」

這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。此次挑戰涉及以下內容:

  • 指針旋轉動畫
  • 現實時鐘的邏輯
  • 取得現實時間
  • 隔一段時間更新畫面

嘗試拆解流程

發現自己一開始的思維太專注在現實時鐘的規則,導致比較像在做計時器,不是時鐘XD

這是修改後的流程圖:

時鐘 flow

時鐘 flow

下面是原本的流程圖,可以看到整個方向錯得很離譜哈哈

計時器 flow

計時器 flow


知識點

CSS - transition

  • transition-property:指定要套用轉場動畫的 CSS 屬性,另有 all、none 值,預設值為 all
  • transition-duration:指定轉場動畫所需經歷的時間,以秒或是毫秒為單位,預設值為 0;可以指定多個時間長度,每個時間長度會被使用在transition-property設定的屬性上
  • transition-timing-function:動畫速度曲線,常見的值可參考 MDN
  • transition-delay:決定動畫起始的時間,預設是 0 秒,可以是負值或是正值

transition 無法作用的情況

transition 可以計算數值,從舊的到新的變化過程,因此無法運算的值都無法作用,像是從不確定值到確切值,例如 width 設定 auto(不確定值)到 100%,或是 display: none 到 block 等

CSS - transform

  • transform:可以變形物件,translate、scale、rotate、skew,更多可以參考 MDN
  • transform-origin:設定元素變化的起始點座標,預設是在元素的左上方,可以寫入百分比、px,或是 left 等方向值

JS - setInterval

固定隔一段時間就執行裡面的內容

setInterval(callback, time);

增進使用體驗

  • 目前只是讓時鐘轉動而已,可以嘗試抓取實際時間

不影響功能,但體驗上會更細緻

  • 指針目前移動看起來沒有阻力,偏像電子鐘XD
  • 指針可以分長短,看起來更符合實際情況

實作

一、透過 JS 取得實際時間

  • new Date():回傳時間物件

處理格式

  1. 自行擷取片段組成字串

都是回傳 Number, 注意 JS 在進行這些操作之前,會先將時間轉成「Local Time」

  • getFullYear():取得年份
  • getMonth():取得月份,注意 0 代表的是 1 月
  • getDate():取得日期
  • getDay():取得星期
  • getHours():取得小時
  • getMinutes():取得分鐘
  • getSeconds():取得秒數
let objectDate = new Date();

let year = objectDate.getFullYear();
console.log(year); // 2023

let month = objectDate.getMonth();
console.log(month + 1); // 9

let day = objectDate.getDate();
console.log(day); // 3
  1. 透過語言來轉換時間的表示法(這次沒有使用到)

以下都是根據「語言」轉換表示法

  • toLocaleString('Language Code'):轉換「日期 + 時間」的格式
  • toLocaleDateString('Language Code'):轉換「日期」的格式
  • toLocaleTimeString('Language Code'):轉換「時間」的格式
let objectDate = new Date();

console.log(objectDate .toLocaleString('zh-TW'));
//"2023/9/3 下午5:57:11"
console.log(objectDate .toLocaleDateString('zh-TW'));
//"2023/9/3"
console.log(objectDate .toLocaleTimeString('zh-TW'));
//"下午5:57:11"

轉換時區

  • toUTCString()
let objectDate = new Date();
objectDate.toUTCString(); //轉換成 UTC+0 的時間

二、指針加入動畫速度曲線

設定 transition-timing-function 屬性,讓指針移動看起來更加細緻,因為這部分的速度曲線要自定義,因此會使用到 cubic-bezier 這個函數,可以搭配 cubic-bezier.com 這個網站觀看效果

附上此次的實作成果,今天就介紹到這裡,若有錯誤歡迎指正,也歡迎大家分享自己的看法。

參考資料

留言
avatar-img
留言分享你的想法!
avatar-img
傑米的沙龍
7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
你可能也想看
Thumbnail
處在與時間賽跑,而且還是倒數計時的過程中,只能停下腳步30秒,紀錄這當下的美好。
Thumbnail
處在與時間賽跑,而且還是倒數計時的過程中,只能停下腳步30秒,紀錄這當下的美好。
Thumbnail
光陰有限, 營生之餘, 別忘記有時放慢腳步欣賞沿途風景.
Thumbnail
光陰有限, 營生之餘, 別忘記有時放慢腳步欣賞沿途風景.
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】,談論時間管理容易讓人誤解,我們能管理時間,增加效率,但是那樣的作用並不大,我們真正能管理的是,什麼對我們來說最重要,這要回推到以終為始,你想成為什麼樣的人,就是做那樣的事!
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】,談論時間管理容易讓人誤解,我們能管理時間,增加效率,但是那樣的作用並不大,我們真正能管理的是,什麼對我們來說最重要,這要回推到以終為始,你想成為什麼樣的人,就是做那樣的事!
Thumbnail
時間能夠倒回嗎? 當然是不行,現在12/25,請問時間可以回到12/24嗎?「孩子們搖搖頭」 時間是會多出來的嗎? 時間不會多出來,而是一次一次安排出來的
Thumbnail
時間能夠倒回嗎? 當然是不行,現在12/25,請問時間可以回到12/24嗎?「孩子們搖搖頭」 時間是會多出來的嗎? 時間不會多出來,而是一次一次安排出來的
Thumbnail
[Leetcode 筆記] TypeScript 2715. Timeout Cancellation 了解和有效使用 clearTimeout 和 setTimeout 可以提高JavaScript程序的效率和響應性。
Thumbnail
[Leetcode 筆記] TypeScript 2715. Timeout Cancellation 了解和有效使用 clearTimeout 和 setTimeout 可以提高JavaScript程序的效率和響應性。
Thumbnail
本次的挑戰是「CSS + JS Clock」,需要達成的目標是:「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。
Thumbnail
本次的挑戰是「CSS + JS Clock」,需要達成的目標是:「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。
Thumbnail
好物推薦~實體番茄鐘,一起讓自己的效率變高吧!
Thumbnail
好物推薦~實體番茄鐘,一起讓自己的效率變高吧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News