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

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

參考資料

7會員
30Content count
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
什麼樣的環境或情況讓你感到最安全呢? 哪些習慣或模式讓你覺得最熟悉呢? 你知道自己的舒適圈嗎? 你是否有想過目前的生活是否過於安逸? 或是曾想過能否為自己創造出更多的可能性? (圖片出處: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
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
什麼樣的環境或情況讓你感到最安全呢? 哪些習慣或模式讓你覺得最熟悉呢? 你知道自己的舒適圈嗎? 你是否有想過目前的生活是否過於安逸? 或是曾想過能否為自己創造出更多的可能性? (圖片出處: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籃板取得自己的新人王...