挑戰 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
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在這一章中,我們介紹了 CSS 的過渡效果和動畫效果。過渡效果使 CSS 屬性的變化更加平滑,而動畫效果則允許我們更精細地控制元素的多個屬性隨時間變化的過程。我們通過基本語法和示例展示了如何使用這些效果,並提供了一個綜合應用的實踐案例來幫助理解。這些技術可以讓你的網頁更具互動性和動態效果。
Thumbnail
一天24小時,每個人的時間都一樣,但不管時針分針怎麼指,真正的時間會變短、變長、變快與變慢,和格林威治的不同。只要在適合與屬於自己的時區內,不論快慢都是對的時間。此外,這個月最大的改變是意象練習的know how,意象練習的運用領域廣泛,尤其在需要高度專注與瞬間判斷的決策環境。
最近在排個人行程時 常常記錯時間 兩個禮拜後 會記成下禮拜 禮拜二以為是禮拜三🤣 這難道是所謂的時間膨脹啦 哈哈 有質量的東西 沒有辦法達到光速 如果有能力 達到光速 時間會變慢 但是這個時間的計算 會不會也受到了 速度跟重力場的影響呢 所謂的時間變慢 是跟另一個基準比
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 今天才發現可以不用看著影片一步一步寫,可以自己先寫寫看😛 第二個挑戰是用 JS + CSS 寫一個時鐘,不過其實檔案裡面 HTML 跟 CSS 都已經寫好了,三個指針也都放好了,Go Live 起來就長
Thumbnail
程式與頻率時間 看起來這個問題有些奇怪,程式與頻率時間有什麼關係呢?一旦程式完成,似乎就不需要再理會頻率和時間了。實際上,這可能是一些不熟悉程式設計的人所提出的疑問。了解程式設計最重要的一點是,頻率和時間的安排會直接影響程式的效能和展現速度。 時間的利用 舉例來說,假設一個表單的每筆處理時間為
Thumbnail
安好,眼睛睜開後,緊張地打開手機看時間,不知道從什麼時候開始,已變成我的日常。一天的開始,小時候的訓練養成把時鐘切得跟披薩一樣,這一個小時50分鐘/休息10分鐘。下一個小時50分鐘/休息10分鐘⋯ 後來很幸運的工作量大增,起床時常常一天已過1/3,眼看著好多「事前功課」怒視著我,時鐘披薩一塊一塊的
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在這一章中,我們介紹了 CSS 的過渡效果和動畫效果。過渡效果使 CSS 屬性的變化更加平滑,而動畫效果則允許我們更精細地控制元素的多個屬性隨時間變化的過程。我們通過基本語法和示例展示了如何使用這些效果,並提供了一個綜合應用的實踐案例來幫助理解。這些技術可以讓你的網頁更具互動性和動態效果。
Thumbnail
一天24小時,每個人的時間都一樣,但不管時針分針怎麼指,真正的時間會變短、變長、變快與變慢,和格林威治的不同。只要在適合與屬於自己的時區內,不論快慢都是對的時間。此外,這個月最大的改變是意象練習的know how,意象練習的運用領域廣泛,尤其在需要高度專注與瞬間判斷的決策環境。
最近在排個人行程時 常常記錯時間 兩個禮拜後 會記成下禮拜 禮拜二以為是禮拜三🤣 這難道是所謂的時間膨脹啦 哈哈 有質量的東西 沒有辦法達到光速 如果有能力 達到光速 時間會變慢 但是這個時間的計算 會不會也受到了 速度跟重力場的影響呢 所謂的時間變慢 是跟另一個基準比
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 今天才發現可以不用看著影片一步一步寫,可以自己先寫寫看😛 第二個挑戰是用 JS + CSS 寫一個時鐘,不過其實檔案裡面 HTML 跟 CSS 都已經寫好了,三個指針也都放好了,Go Live 起來就長
Thumbnail
程式與頻率時間 看起來這個問題有些奇怪,程式與頻率時間有什麼關係呢?一旦程式完成,似乎就不需要再理會頻率和時間了。實際上,這可能是一些不熟悉程式設計的人所提出的疑問。了解程式設計最重要的一點是,頻率和時間的安排會直接影響程式的效能和展現速度。 時間的利用 舉例來說,假設一個表單的每筆處理時間為
Thumbnail
安好,眼睛睜開後,緊張地打開手機看時間,不知道從什麼時候開始,已變成我的日常。一天的開始,小時候的訓練養成把時鐘切得跟披薩一樣,這一個小時50分鐘/休息10分鐘。下一個小時50分鐘/休息10分鐘⋯ 後來很幸運的工作量大增,起床時常常一天已過1/3,眼看著好多「事前功課」怒視著我,時鐘披薩一塊一塊的