挑戰 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
7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
什麼樣的環境或情況讓你感到最安全呢? 哪些習慣或模式讓你覺得最熟悉呢? 你知道自己的舒適圈嗎? 你是否有想過目前的生活是否過於安逸? 或是曾想過能否為自己創造出更多的可能性? (圖片出處:https://images.ctee.com.tw/newsphoto/2022-02-05
Thumbnail
閱讀的內容可以實踐嗎? 最近因為同事推薦,而閱讀了《愛的哲學課》,當我在方格子寫完-誰讓你看見愛?-<愛的哲學課>書評 突然靈機一動,在書中有這麼多似懂非懂的箴言(也像是心靈雞湯...), 如果我每天試著把1句話應用在生活上,會是什麼樣的體驗?於是開啟了這次的挑戰
Thumbnail
今天來學習新的對話 首先需知道的詞彙如下 убрать (to clean up) (v.p.) грязная (dirty) (adj.) обещать (to promise) (v.imp.) занятый (busy) (adj.) оправдание (excuse)
Thumbnail
「真正讓你勇敢的,從來不是你的感覺,而是你的行動」— 網球名將阿格西 最近看完⟪ 公開 : 阿格西自傳 ⟫後得到這句話,讓我想到我一直想要做,卻一直找藉口的事情,那就是運動。 自從生完孩子後,身體不僅無法恢復到從前的狀態,體重還不斷增加。隨著這些變化,健康也開始出現問題
Thumbnail
本次的挑戰是「CSS Variables」,需要達成的目標是:「使用者操作拉桿或是選色器時,底下圖片的樣式會有對應的變化。」
Thumbnail
每次一轉到新聞台,都會讓我看到憤怒的訊息。除了思考媒體本身之外,接觸到心理學的粉專另外也建議,我們可以試著覺察自己憤怒的情緒,以及背後的原因。
Thumbnail
我還可以用 不要丟棄我 不!要!啊! 我是裝飾擺設 你看不到我 你看不到我 我是你們的回憶 你不能遺棄我呀 對不起!感謝!再見! 最近又開始斷捨離,整理時,一邊檢視物品,一邊想像物品會對我說甚麼? 我想對它們說:對不起,我們要輕裝上路!感謝你們過去陪伴,再見!
Thumbnail
魔鬼說 跳下去 所有痛苦絕望 消失殆盡 跳下去 世界不會因為你而停轉 折翼的天使說 信望愛 留下來 一起旁觀世界的運轉
Thumbnail
新媒體的崛起,不論是社群平台、Youtube、部落格,每個人都有一個讓他人認識自己的門戶,但,回到自我本身,有沒有想過,隨著時代的轉變,更多企業需要透過影音履歷來認識你!這麼多年來,你是否也未曾想過要用一分鐘時間來介紹自己呢?我也有過同樣的瓶頸,但,在這裡,我已經找到解法,就一起來實務操作吧!
Thumbnail
  先帶大家認識一下,2012 NBA選秀第1輪第6順位誕生出來的波特蘭拓荒者一哥Damian Lillard是當年賽季的新人王,賽季打不到一半,Lillard的名聲就開始響徹雲霄,先是取得技術挑戰的冠軍再破NBA新秀最多三分球紀錄,而後再以19分6.5助攻3.1籃板取得自己的新人王...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
什麼樣的環境或情況讓你感到最安全呢? 哪些習慣或模式讓你覺得最熟悉呢? 你知道自己的舒適圈嗎? 你是否有想過目前的生活是否過於安逸? 或是曾想過能否為自己創造出更多的可能性? (圖片出處:https://images.ctee.com.tw/newsphoto/2022-02-05
Thumbnail
閱讀的內容可以實踐嗎? 最近因為同事推薦,而閱讀了《愛的哲學課》,當我在方格子寫完-誰讓你看見愛?-<愛的哲學課>書評 突然靈機一動,在書中有這麼多似懂非懂的箴言(也像是心靈雞湯...), 如果我每天試著把1句話應用在生活上,會是什麼樣的體驗?於是開啟了這次的挑戰
Thumbnail
今天來學習新的對話 首先需知道的詞彙如下 убрать (to clean up) (v.p.) грязная (dirty) (adj.) обещать (to promise) (v.imp.) занятый (busy) (adj.) оправдание (excuse)
Thumbnail
「真正讓你勇敢的,從來不是你的感覺,而是你的行動」— 網球名將阿格西 最近看完⟪ 公開 : 阿格西自傳 ⟫後得到這句話,讓我想到我一直想要做,卻一直找藉口的事情,那就是運動。 自從生完孩子後,身體不僅無法恢復到從前的狀態,體重還不斷增加。隨著這些變化,健康也開始出現問題
Thumbnail
本次的挑戰是「CSS Variables」,需要達成的目標是:「使用者操作拉桿或是選色器時,底下圖片的樣式會有對應的變化。」
Thumbnail
每次一轉到新聞台,都會讓我看到憤怒的訊息。除了思考媒體本身之外,接觸到心理學的粉專另外也建議,我們可以試著覺察自己憤怒的情緒,以及背後的原因。
Thumbnail
我還可以用 不要丟棄我 不!要!啊! 我是裝飾擺設 你看不到我 你看不到我 我是你們的回憶 你不能遺棄我呀 對不起!感謝!再見! 最近又開始斷捨離,整理時,一邊檢視物品,一邊想像物品會對我說甚麼? 我想對它們說:對不起,我們要輕裝上路!感謝你們過去陪伴,再見!
Thumbnail
魔鬼說 跳下去 所有痛苦絕望 消失殆盡 跳下去 世界不會因為你而停轉 折翼的天使說 信望愛 留下來 一起旁觀世界的運轉
Thumbnail
新媒體的崛起,不論是社群平台、Youtube、部落格,每個人都有一個讓他人認識自己的門戶,但,回到自我本身,有沒有想過,隨著時代的轉變,更多企業需要透過影音履歷來認識你!這麼多年來,你是否也未曾想過要用一分鐘時間來介紹自己呢?我也有過同樣的瓶頸,但,在這裡,我已經找到解法,就一起來實務操作吧!
Thumbnail
  先帶大家認識一下,2012 NBA選秀第1輪第6順位誕生出來的波特蘭拓荒者一哥Damian Lillard是當年賽季的新人王,賽季打不到一半,Lillard的名聲就開始響徹雲霄,先是取得技術挑戰的冠軍再破NBA新秀最多三分球紀錄,而後再以19分6.5助攻3.1籃板取得自己的新人王...