挑戰 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 這個網站觀看效果

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

參考資料

6會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
挑戰 JS30 #1 - JavaScript Drum Kit
閱讀時間約 7 分鐘
你可能也想看
挑戰七天日更 DAY 2 :讓人憤怒的新聞台每次一轉到新聞台,都會讓我看到憤怒的訊息。除了思考媒體本身之外,接觸到心理學的粉專另外也建議,我們可以試著覺察自己憤怒的情緒,以及背後的原因。
Thumbnail
avatar
Kevin Chen
2021-09-21
【挑戰-用50字寫一個故事】斷捨離 隨想曲我還可以用 不要丟棄我 不!要!啊! 我是裝飾擺設 你看不到我 你看不到我 我是你們的回憶 你不能遺棄我呀 對不起!感謝!再見! 最近又開始斷捨離,整理時,一邊檢視物品,一邊想像物品會對我說甚麼? 我想對它們說:對不起,我們要輕裝上路!感謝你們過去陪伴,再見!
Thumbnail
avatar
Emma
2021-01-05
【挑戰-用50字寫一個故事】折翼的天使魔鬼說 跳下去 所有痛苦絕望 消失殆盡 跳下去 世界不會因為你而停轉 折翼的天使說 信望愛 留下來 一起旁觀世界的運轉
Thumbnail
avatar
Emma
2021-01-04
挑戰島主徵選【1分鐘自介影片】腳本指南新媒體的崛起,不論是社群平台、Youtube、部落格,每個人都有一個讓他人認識自己的門戶,但,回到自我本身,有沒有想過,隨著時代的轉變,更多企業需要透過影音履歷來認識你!這麼多年來,你是否也未曾想過要用一分鐘時間來介紹自己呢?我也有過同樣的瓶頸,但,在這裡,我已經找到解法,就一起來實務操作吧!
Thumbnail
avatar
逆商教主Jinjin Wen
2020-12-03
挑戰NBA最強後衛 - Damian Lillard  先帶大家認識一下,2012 NBA選秀第1輪第6順位誕生出來的波特蘭拓荒者一哥Damian Lillard是當年賽季的新人王,賽季打不到一半,Lillard的名聲就開始響徹雲霄,先是取得技術挑戰的冠軍再破NBA新秀最多三分球紀錄,而後再以19分6.5助攻3.1籃板取得自己的新人王...
Thumbnail
avatar
韋恩
2020-08-31
挑戰不穿內衣的生活!5個不穿內衣的原因最近在YouTube頻道上,有很多人反應維尼的T恤已經鬆掉了、也該換了! 其實單就這個理由還無法讓我們想要購買新的T恤,因為購物是一件非常累人的事情,如果誘因不夠很難讓極簡人購物,哈哈! 這次真正讓我想要更換新的T恤的原因是,我不想再穿內衣了! 這次跟大家分享5個我們不想再穿內衣的原因,以及3種我們
Thumbnail
avatar
布蘭達&維尼
2020-08-28
挑戰你能吃幾盤!平價迴轉壽司大評比台灣人對於日本食物接受度極高,迴轉壽司的價位通常也不算太高,種類多元可以選擇。炎炎夏日又想大快朵頤,就決定是壽司吧!那麼多數的網友們對連鎖迴轉壽司店的討論度又是如何呢?我們挑選出了幾個在台灣較廣為人知的迴轉壽司店:爭鮮、藏壽司、壽司郎、HAMA壽司等,究竟哪一間讓網友都怒吃一波呢?
Thumbnail
avatar
Wisdom字慧輿情
2020-05-29
挑戰Deja vu (似歷其境)的奧秘Deja Vu如果不是腦部系統故障,那會是時空穿梭遊歷嗎? 你有試過明明是「第一次」來到某一個地方、聽某一句話、見某一個人,卻感覺曾親歷其境「似曾相識」嗎? 也許你不只是「Deja Vu」,而是你的潛意識或超意識早就穿越過這時空了。
Thumbnail
avatar
大地僕人札記
2020-05-03
挑戰更少的金錢支出。不消費的2019-01食不過三餐,眠僅需六尺。 想要持續挑戰用更少的物品和金錢支出,維持或得到更好的生活品質。希望有一天,屬於自己的身外之物能少到能隨時說走就走,沒有後顧之憂。
Thumbnail
avatar
壹肆說
2019-02-09
挑戰只靠比特幣生活,在台灣我可以活幾天?這幾天中國有部紀錄片引起了我的興趣,一個比特幣狂熱者發起一項企劃:挑戰用0.21個比特幣活21天!0.21個比特幣換算下來約莫是新台幣4萬元,聽起來用4萬活個21天好像可以過得還不錯...
Thumbnail
avatar
moneybar
2018-10-19