你這個課程方向非常好 👍
很多大一新生如果一開始就被「排版、美化」卡住,很容易誤會「網頁程式」只是修修 CSS 而已;反而應該用 HTML + JavaScript 來快速讓他們「看得見程式的效果」。以下給你幾點建議:
HTML 當作容器:只要教到最基本的 <div>、<button>、<input>,不用花時間在 CSS 上。
JavaScript 當作主角:從互動、邏輯開始,讓學生「按下按鈕 → 畫面改變」立刻有成就感。
我建議課程循序漸進,但每一步都能看到「互動成果」:
第一堂就動手做:一個按鈕 + 一段 JavaScript,點了會改變文字或顏色。
基礎概念:變數、條件判斷、迴圈。
對應練習:
做一個「簡單計算機」(加減乘除)。
做一個「隨機抽籤」功能(今天中午吃什麼)。
加深邏輯:陣列、函式、事件處理。
練習題目:
猜數字遊戲(輸入數字 → 系統回饋「太大」「太小」)。
點擊反應遊戲(按鈕隨機出現,點得快才加分)。
待辦清單(新增/刪除項目)。
引入物件:理解物件與 JSON,稍微感受「資料結構」。
練習題目:
簡單小問卷(輸入姓名 → 印出歡迎詞,或統計結果)。
基礎圖表(用 Canvas 畫長條圖,數據可以隨機產生)。
簡單動畫(小球左右移動,或隨機掉落)。
先做出效果,再解釋原理
比如「按鈕換顏色」,學生先看到結果,再反推程式碼背後邏輯,比較有動機理解。
任務導向,而不是語法導向
不要從 var / let / const 的差別開始,而是從「我要存一個名字」→ 才介紹變數。
即時互動 & 成就感
每一堂課都讓學生帶走一個「可運作的小作品」,哪怕很簡單,也能有展示感。
漸進引導抽象概念
初學者很容易被 for loop、function 嚇到,可以先用生活比喻(例如:點名 = 迴圈、點餐 = 函式呼叫)。
非常好的問題 👌
對於 完全沒學過 HTML 與程式的新生,要避免一次就丟給他們一整段程式碼。建議做 「逐層拆解 + 註解」 的方式,讓學生從「這是網頁骨架」→「這是文字」→「這是互動」慢慢進入。
我幫你把第一個 Demo 改寫成 超級拆解版本,並在程式碼中放上大量註解(幾乎逐行解釋)(JSbin、JSfiddle),讓學生可以邊看邊理解:
第一步:只給 <h1>Hello World!</h1>
→ 學生先看到「原來這樣就能在網頁顯示文字」。
第二步:加上 <button>
→ 學生看到「網頁有按鈕,但點下去沒反應」。
第三步:加上 <script> 和 changeMessage()
→ 學生看到「點下去,文字會改變!」,感受到程式邏輯的威力。
最後一步:展示完整範例
→ 告訴學生「這就是一個完整的小作品」,鼓勵他們可以修改文字、換顏色、甚至改成顯示自己的名字。
這樣分拆後,新生不會被一整份 HTML + JS 壓垮,而是能「逐步建立信心」。
要不要我幫你設計一個 投影片式的漸進展示(第一張只顯示 h1 → 第二張加 button → 第三張加 JS),方便你上課直接一步步帶學生走?
你抓到重點了 👍
對大一新生來說,這兩個東西 是入門 JavaScript 最常用的核心語法之一,一定要拆解清楚,甚至做比較,否則他們會覺得只是「神奇咒語」。我幫你規劃一個 「漸進式教學單元」,先講概念 → 再給範例 → 再比較替代語法。
概念:
document:代表整個網頁(HTML 文件)。
.getElementById("msg"):意思是「去找到 id 叫做 msg 的那個元素」。
類比:就像在學校找人 →「在學生名單(document)中,找到學號是 msg 的那位同學」。
概念:
.innerText:代表「這個元素裡面顯示給使用者看的文字內容」。
如果你想改變文字 → 改它的 .innerText。
innerText 取得或改變「純文字」,例如:el.innerText = "文字"
innerHTML 取得或改變「HTML 內容」,例如:el.innerHTML = "<b>粗體字</b>"
textContent 類似 innerText,但不管 CSS 隱藏,會抓到完整文字,例如:el.textContent
👉 建議:用 比較表投影片,並讓學生實驗看看三者差異(例如用隱藏元素測試 innerText vs textContent)。
getElementById("id") 找「唯一 id」,例如:document.getElementById("msg")
getElementsByTagName("tag") 找所有某標籤元素(回傳陣列),例如:document.getElementsByTagName("p")[0]
getElementsByClassName("class") 找某 class 的元素們,例如:document.getElementsByClassName("box")[0]
querySelector("CSS選擇器") 找符合 CSS 選擇器的第一個元素,例如:document.querySelector("#msg")
querySelectorAll("CSS選擇器") 找符合 CSS 選擇器的所有元素(陣列),例如:document.querySelectorAll(".box")
👉 新手可以先學 getElementById(),但也要讓他們知道「其實還有更多方法」。
第一步:直覺體驗
示範 getElementById → .innerText 改變文字。
學生立刻看到「我可以控制網頁上的東西」。
第二步:拆解物件 & 屬性
用 alert(myTitle) 讓學生看到「這不是文字,是一個 HTML 元素物件」。
再用 alert(myTitle.innerText),讓學生理解「這才是裡面的文字」。
第三步:比較表
投影片列出 innerText / innerHTML / textContent 的差異。
小實驗:隱藏元素 → 測試三者。
第四步:進階延伸
展示其他 DOM 選擇方法 (querySelector),但不強求背。
鼓勵學生有概念:「以後如果想找更多元素,還有不同的方法」。
好,這是一個很棒的教學切入點 👍
getElementById() → 抓到網頁上的某個元素(一定要給它 id)。
innerText → 只能改變文字,不會解析 HTML。
innerHTML → 可以改變整段內容,並且會解析裡面的 HTML 標籤。
按「使用 innerText」
畫面會出現:<b>粗體文字</b>
直接當作純文字顯示。
按「使用 innerHTML」
畫面會出現:粗體文字
真的套用了 <b> 標籤,文字變粗體。
第一步:先用 innerText,把字改掉,學生會覺得「喔~可以改字!」。
第二步:再用 innerHTML,效果不同 → 「咦?為什麼變粗體?」
第三步:強調兩者差異(文字 vs HTML 解析)。
第四步:小練習題:
用 innerText 顯示「2 + 3 = 5」
用 innerHTML 顯示「2<sup>3</sup> = 8」
這個切入點非常好 👍
因為 圖片 (<img>) 與 超連結 (<a>) 本身就是「內容元素」,搭配 innerHTML 就能自然過渡,讓學生自己去發現更多 HTML 的威力。
先讓學生看到:
document.getElementById("demo").innerHTML = "<b>粗體文字</b>";
然後提問:
👉「如果我不要改文字,而是要顯示一張圖片,該怎麼辦呢?」
👉「如果我想把文字變成一個可以點的連結,該怎麼寫呢?」
這樣問題會自然過渡到 <img> 和 <a>。
給學生一個 空白模板 (JSbin、JSfiddle),讓他們自己補:
老師不要直接給答案,而是丟「搜尋線索」:
「在網頁上顯示圖片的 HTML 語法是什麼?」
「怎樣才能讓文字變成超連結?」
「你能不能把這些語法放進 innerHTML 裡,看看會不會動?」
讓學生試試看:
document.getElementById("demo").innerHTML = "<img src='https://picsum.photos/200'>";
document.getElementById("demo").innerHTML = "<a href='https://google.com'>去 Google</a>";
顯示一張圖片,點圖片時要能開啟連結(<a><img></a>)。
把某個文字變成藍色可點擊的超連結。
顯示兩張不同大小的圖片(引導 <img width="">)。
這個「隨機抽籤(今天中午吃什麼)」超適合拿來做一個 從簡單到進階的程式邏輯訓練路線。
因為它能涵蓋:變數、陣列、隨機數、函式、條件判斷、DOM 操作…一路循序漸進。
我幫你設計一個 五階段的版本規劃,每一階段都只多加一點點程式邏輯,確保學生能跟得上。
目的:讓學生習慣 按下按鈕 → JavaScript 改變畫面文字。
👉 程式概念:函式呼叫、innerText 改值。
目的:讓學生體驗 隨機數 + if 判斷。
👉 程式概念:隨機數、條件判斷。
目的:讓學生體驗 隨機數 + if 判斷。
目的:讓學生體驗 隨機數 + switch 判斷。
👉 痛點刻意放大:程式碼重複、難維護、不易新增選項。
引導問題:
「如果我想要 10 種食物,程式會變成什麼樣子?」
「能不能有一個更簡潔的方法?」
這樣就能自然過渡到 陣列版本 (版本 4),學生會更容易理解「陣列的價值」。
目的:引入 陣列 與更靈活的隨機選擇。
👉 程式概念:陣列、Math.floor()、陣列長度 length。
目的:結合 innerHTML,加強學生對文字 vs HTML 的理解。
👉 程式概念:物件陣列、innerHTML 動態生成內容。
目的:讓學生體驗「真實小專案開發」的思考。
延伸挑戰:
避免重複抽到 → 使用 splice() 移除已選項目。
抽 2~3 個建議 → 顯示多個結果。
使用者輸入選項 → 學生自己新增食物,再進行抽籤。
👉 程式概念:迴圈、陣列操作方法、輸入表單值。
每堂課只推進一個版本,讓學生有成就感。
每個版本都留伏筆:「那如果有五種食物呢?」 → 自然導向下一版。
版本 6 可當作小專案作業,讓學生發揮創意(有的人會加動畫、有人會加圖片庫)。
以下是一個**「隨機抽籤 UI 從簡到進階」的完整教學規劃,目標是讓學生在已有基礎(版本4: 陣列+隨機抽取)之後,逐步挑戰「動畫效果」與「使用者體驗」。
每個版本都會增加新的程式邏輯**,從單純的「結果變化」到最終「像 Wheel of Names 那樣有動畫」:
版本6 文字快速閃爍:按下按鈕時,候選餐點會快速切換幾次後才停下,以 setInterval() 週期更新文字、clearInterval() 停止計時。
版本7 圖片輪播:把餐點改成圖片 (例如餐廳Logo或餐點照片) 閃爍,圖片陣列操作、DOM <img> src 屬性切換
版本8 速度漸慢的抽籤:文字或圖片一開始高速切換,然後慢慢停下,動態調整 setTimeout() 間隔,基礎「緩動」概念。
版本9 簡易圓盤轉動:簡單的「轉盤」圖片+CSS transform: rotate() 旋轉,隨機角度計算、CSS 轉場動畫(transition)。
版本10 完整轉盤抽籤:類似 Wheel of Names:多個區塊、轉動停在隨機扇形,以 SVG 或 <canvas> 繪製扇形、三角函數計算停靠角度。
功能:按下按鈕後,文字隨機快速閃爍 1 秒,再顯示結果。
🔑 學習重點
功能:把每個餐點改成圖片,閃爍時快速切換圖片。
🔑 學習重點
陣列物件 {name, img}
動態改變 <img src>
功能:一開始快速閃爍,之後速度逐漸減慢,最後停下。
🔑 學習重點
用 setTimeout() 替代固定間隔
漸進增加間隔時間(模擬減速)
功能:使用一張圓盤圖片,按下按鈕後旋轉到隨機角度再停下。
🔑 學習重點
CSS conic-gradient 畫圓盤
transform: rotate() 與 transition 動畫
計算隨機角度
使用 <canvas> 或 SVG 動態繪製多個扇形
根據抽取角度顯示中獎區塊
可增加「指針」與音效 ➡️ 接近 Wheel of Names 功能
(此版本可作為課程最終專題)
對比展示:從版本4(純文字隨機) → 版本5(閃爍) → 版本7(漸慢) → 版本8(轉盤),每次 Demo 讓學生看到「體驗差異」。
小挑戰:每個版本後給一個小作業,如「換成圖片」「調整減速公式」。
真實案例:播放 Wheel of Names 或電商抽獎影片,連結到日常應用。
下面提供一個**「相片瀏覽功能」的教學階梯**,讓學生從最簡單的圖片切換逐步學到條件判斷、陣列、參數傳遞等程式概念,最後再對比之前的「隨機抽籤」系列,點出兩者的不同與互補。
版本1:固定兩張圖片,兩個按鈕各自呼叫函式。每個按鈕只會切換到一張指定圖片,函式定義與 onclick 事件,最基本 DOM 操作。
版本2:多張圖片,但仍為各自函式。多張圖片,上一張/下一張各有不同函式,基礎條件判斷(if)控制圖片範圍。
版本3:使用陣列儲存圖片、單一函式 + 傳參數。透過陣列與索引,上一張/下一張共用函式,陣列、索引、參數傳遞。
版本4:自動處理首尾循環。看到第一張再按上一張會跳到最後一張,條件判斷與模數(%)運算。
版本5:整合UI提示(頁碼/圖片數)。顯示「目前第 n 張 / 共 m 張」,變數狀態同步更新、字串模板。
最簡單的版本,每個按鈕直接指定一張圖片。
🔑 學到:
document.getElementById().innerHTML
基礎事件綁定 onclick
加入更多圖片,但仍然每個按鈕各自處理。
🔑 學到:
變數狀態 (current)
條件判斷 防止超出範圍
將圖片檔名放入陣列,透過傳參數 +1 / -1 控制上一張或下一張。
🔑 學到:
陣列 photos[]
傳參數 changePhoto(-1)
以 photos.length 動態控制範圍
❌【示範:沒有整體性變數 → 會出問題的版本】
🔑 學到:
let index = 0; 核心錯誤:變數放在函式內,每次呼叫 showNext() 都重新宣告並初始化為 0。
index = index + 1; 表面看似累加,其實只是 0+1,每次都回到 1。
document.getElementById("photoArea").innerHTML = photos[index];
加入「循環」邏輯:若到第一張再按上一張,會回到最後一張。同步顯示「第 n 張 / 共 m 張」。
🔑 學到:
模數運算 % 處理循環
省去多層 if 判斷
情境連結:相簿瀏覽是日常常見的功能(社群平台、電商相簿)。
陣列的線性瀏覽 :陣列是連續結構,必須正確維護索引才能依序取出元素。
函式參數化:同一個函式可處理兩個動作。
整體性變數:用來儲存「系統目前狀態」並在多次呼叫間保持一致。就像缺少全域 index,狀態每次都被重新初始化,功能失效。
作業變化:
加入自動播放(挑戰 setInterval())。
每張照片加上說明文字。
支援鍵盤左右鍵切換。
學習門檻
Materialize CSS 相對簡單:直接套 class 名即可,不必學 Tailwind。⚠️ 但 class 名是 Materialize 自訂規則,日後改框架需重新學習語法。
daisyUI 稍高:daisyUI 依附 Tailwind,要懂基本的 Utility Class 概念(如 p-4, text-center)。但 daisyUI 元件本身也提供類似 Materialize 的「語意化元件 class」(如 btn、card),可直接上手。
RWD(響應式設計)
Materialize CSS:預設有 Grid system (12 欄) 與 breakpoints。
daisyUI:完全依賴 Tailwind 的 RWD 系統,class 命名清楚(如 md:、lg: 前綴),更細緻彈性。
元件豐富度 / 美觀度
Materialize CSS:提供基礎元件 (navbar, card, modal, slider)。樣式偏 Google Material Design,較固定。
daisyUI:提供數十種 UI 元件(button, card, dropdown, modal, alert, menu, tabs…)+ 主題系統,外觀可快速切換,顏色與風格更現代。
生態與未來性
Materialize CSS:曾流行,但更新較慢,新專案減少。
daisyUI:新興且持續成長,結合 Tailwind,在 Next.js/Vue/React 等現代框架中普及。
適合對象
Materialize CSS:希望快速做出「Material Design」風格且不在意未來擴充。
daisyUI:想學習更現代的 Tailwind + 可自由切換風格的 UI,並打算未來升級到 React/Next.js。
👉 總結
純初學者:Materialize 上手稍快。
想學現代網頁+更靈活RWD:daisyUI 更值得投資學習(尤其課程後續會接觸陣列/迴圈/元件化)。
建立 HTML 檔(不需安裝任何工具)。
在 <head> 中引入 Tailwind CDN + daisyUI 主題。
在 <body> 中直接寫 daisyUI 元件 class。
選擇 Card(卡片)作為初學者範例,並不是偶然,它在網頁 UI 設計中具有高度代表性與學習價值。以下是原因與教學意義:
真實世界應用廣:幾乎所有網站都看得到。如:電商商品卡 (蝦皮、Amazon、momo)、影音平台影片縮圖 (YouTube)、部落格文章摘要 (Medium)、IG/Facebook 貼文預覽。學生一看就懂「原來是商品或資訊的容器」→ 學習動機高。
結構完整:典型 Card 結構:圖片 + 標題 + 描述 + 按鈕, 認識父子元素、容器概念。
版面彈性:學習 Grid/Flex 排版,體驗響應式調整。
互動延伸:卡片可以點擊整張跳連結、Hover 放大/陰影、按收藏/購買,並且結合 JavaScript 的事件綁定、資料動態產生。
風格自由:圖片大小、文字比例、按鈕樣式都能自由變化,練習 CSS Utility Class (Tailwind),體會 UI 設計美感。
以下提供 7 個版本,示範如何從「靜態 HTML」到「陣列 + 迴圈 + 條件判斷 + 按鈕事件 + 事件與篩選 + 搜尋功能 + 排序功能」逐步練習。 全部使用 Tailwind + daisyUI CDN,可直接貼到 JSBin、JSFiddle 即可執行。
(JSbin、JSfiddle) 目標:先認識 daisyUI Card 與 RWD Grid 排版,不使用任何 JS。
✅ 學到:
RWD grid 設計 (grid-cols-1 sm:grid-cols-2 lg:grid-cols-3)
daisyUI card 結構。
(JSbin、JSfiddle) 目標:體驗 陣列 + 迴圈,減少重複 HTML。
ES6的模板字串${}版 (JSbin、JSfiddle)
✅ 學到:
陣列儲存多筆資料
for 迴圈產生重複結構。
(JSbin、JSfiddle) 目標:引入 if 判斷,動態標示特殊商品。
ES6的模板字串${}版 (JSbin、JSfiddle)
✅ 學到:
if 判斷 配合字串插入
更動態的畫面控制。
(JSbin、JSfiddle) 目標:用迴圈 + 事件綁定,點擊按鈕顯示商品名稱。
ES6的模板字串${}版 (JSbin、JSfiddle)
✅ 學到:
createElement + innerHTML 動態 DOM
迴圈中事件綁定 (每張卡片有自己的邏輯)。
(JSbin、JSfiddle) 目標:頁面多一個「顯示價格 < 25 元」的篩選按鈕,點擊後只顯示符合條件的商品。
ES6的模板字串${}版 (JSbin、JSfiddle)
✅ 學到:
事件綁定 + 迴圈過濾(filter 或 if)。
(JSbin、JSfiddle) 目標:在輸入框輸入文字,即時篩選出名稱或描述含有該文字的商品。
ES6的模板字串${}版 (JSbin、JSfiddle)
✅ 學到:
keyup 事件 + for 迴圈 + 字串比對 (includes)
(JSbin、JSfiddle) 目標:提供「價格升序 / 降序」按鈕,點擊後重新排序並渲染。
ES6的模板字串${}版 (JSbin、JSfiddle)
✅ 學到:
sort() + 重新渲染。
在 JavaScript 中,sort() 是 陣列(Array)內建的方法。它會依照我們給的規則,重新排列陣列裡的資料。
二、沒有傳入比較函式時的陷阱
const nums = [5, 20, 3];
nums.sort();
console.log(nums);
輸出結果是:[20, 3, 5]
這不是升序!原因是:預設的 sort() 會把元素「轉成字串」再比大小。也就是比較 '20'、'3'、'5',字串排序的結果是依照第一個字母(或數字)ASCII 位置來排的。
要讓數字照大小排,我們要自己告訴 sort 怎麼比。
nums.sort(function(a, b){
return a - b; // 升序(小→大)
});
sort() 每次會拿兩個元素出來比:如果回傳值是 負數,代表 a 要排在 b 前面。如果回傳值是 正數,代表 a 要排在 b 後面。如果回傳值是 0,代表順序不變。
products.sort(function(a, b){
return a.price - b.price;
});
意思是:若 a.price 比 b.price 小,會得到負數(a 排前)。若 a.price 比 b.price 大,會得到正數(a 排後)。
products.sort(function(a, b){
return b.price - a.price;
});
四、要小心的地方
原本的陣列也被改變,sort() 是「就地修改」,若要保留原本順序,可先複製。
Google AI Studio (注意:"發布"前會被要求先押信用卡號扣款的喔)
你這個課程方向非常好 👍
很多大一新生如果一開始就被「排版、美化」卡住,很容易誤會「網頁程式」只是修修 CSS 而已;反而應該用 HTML + JavaScript 來快速讓他們「看得見程式的效果」。以下給你幾點建議:
👉 「前端不會自己有資料,資料要靠別的東西給它。」(JSbin、JSfiddle)
學習重點:
「資料不是立刻拿到」→ 非同步概念
使用 callback function
當作「模擬真正資料庫」
👉「學會用 Google Visualization API 查詢 Google Sheet」(JSbin、JSfiddle)
學習重點:
知道「資料庫放雲端」是怎麼回事
Google Sheet (分享權限改為「知道連結的人都能查看」) → JSON Table
👉 「練習像 SQL 的語法」(JSbin、JSfiddle)
學習重點:
引入 Google Visualization Query Language
學到:select、where、order by
注意:列字母(A, B, C...)對應欄位,且要注意資料型別(數字 / 文字)在 where 條件中的寫法差異。
👉「將資料呈現成真正的 table、增加使用者輸入搜尋框」(JSbin、JSfiddle)
學習重點:
動態 DOM 建立 <table>
前端搜尋 / filter
學習重點:
了解「資料表」和「資料視覺化」是兩種不同呈現方式
Google Chart 基本用法
select C, sum(D) group by C
把資料按照 C 欄位分組,並且把同一組裡的 D 欄位加總。最後只輸出「C 欄位」和「加總後的。
Google Sheet建議欄位:
id:商品編號,進入商品詳細頁會用到
name:商品名稱
desc :商品簡短描述(摘要)
price:售價
img:商品示意圖 URL(這裡用 picsum.photos)
Google Sheet範例內容:https://docs.google.com/spreadsheets/d/1cB6a4F4soIDf8zOovv47nnYhJs_KESJKrInGyjJT-FQ/
👉要讓 HTML 讀取:Google Sheet → 分享 →「知道連結的人都可以查看」
👉 使用 DaisyUI CDN、Tailwind CDN、Google Visualization API (JSbin、JSfiddle)
功能:
從 Google Sheet 讀資料
以 DaisyUI Cards 呈現商品列表
使用 picsum.photos 圖片
按鈕預留前往 product.html?id=xxx(商品詳細頁)
下面提供你一份可直接放在 JSBin / VS Code 的範例程式碼,功能包含:
✅ 使用 DaisyUI + Tailwind(CDN 版)
✅ 在自製 HTML 頁面填表
✅ 自動把資料 送進 Google Form → 存到關聯 Google Sheet
✅ 支援 Google Form 預先填入連結(prefill)
請先完成三件事:
建立一個 Google Form(例如:客戶姓名、連絡電話、商品名稱、數量)(從連結的Google Sheet另建副本就能拿到兩個檔案)
透過「預先填寫表單」功能取得 Google Form 提交 URL(不是 public form URL!)
從 Google Form 提交 URL 找到 欄位的 entry.1234567890
👉 (JSbin、JSfiddle) 記得把 GOOGLE_FORM_ACTION_URL 與 entry 名稱換成你的 (就像這樣:JSbin、JSfiddle)
這段程式碼做了什麼?
DaisyUI 表單介面 看起來像真正的線上訂購系統
fetch → Google Form 把資料 POST 到表單後台
mode:no-cors Google Form 需要用這個
表單自動 reset 送出後清空表單
顯示成功訊息 模擬電商下單流程
一個標準的「最新消息 News」資料表,通常包含:
id:唯一編號(避免未來多筆同日資料混淆)
title:最新消息標題
content:最新消息內容(或簡短摘要)
date發佈日期(YYYY-MM-DD)
link (選用):點進去的詳細頁 URL
image (選用):搭配縮圖(picsum.photos 或雲端圖片)
img:商品示意圖 URL(這裡用 picsum.photos)
Google Sheet範例內容:https://docs.google.com/spreadsheets/d/1TfNFLDOU4e_hPynUZDuk3pLXHqoRbiNXGazBN2jfspo
👉你只要把 SHEET_ID 跟 SHEET_NAME 換成自己的即可 (JSbin、JSfiddle)
實際上它會回傳:
{
"articles": [
{
"title": "...",
"link": "...",
"thumb": "...",
"tags": [...],
}
]
}
articles → 文章陣列
title → 標題
link → 超連結
thumb → 縮圖
要做導航的話,就是 http://maps.google.com.tw/maps?saddr=起點經緯度座標或地址&daddr=終點經緯度座標或地址。
譬如中興大學校園大樓座標的資料已經建立在此https://docs.google.com/spreadsheets/d/1c8csSLxxQwEruOCT1TxyxgBk5v72tTMErvUEYoSGf2s/pubhtml,大家可以問問ChatGPT怎麼用這些資料很快做出校園導覽。