让卡片动起来
JavaScript 交互入门
← → 键切换 · 点击底部导航跳转
HTML + CSS 做的静态页面
好看,但按钮按了没反应
点按钮 → 金句随机切换!
还要加一点 CSS 升级
和上节课比,新增了:
渐变色背景
transition 过渡
:active 点击效果
按钮加了 id="nextBtn"
金句改为占位文字
第112-164行
整整52行 JS!
这节课的重点就是 JavaScript 部分
135deg = 角度(从左上到右下)
#667eea = 起始颜色(蓝)
#764ba2 = 结束颜色(紫)
浏览器会自动在两种颜色之间过渡
🎨 替换练习:改 135deg → 0deg(上下渐变)
改颜色 → #f093fb → #f5576c(粉红渐变)
transition 让 CSS 变化时有平滑动画:
| 61 | .quote-text { transition: opacity 0.3s; } | 透明度变化时,0.3秒内渐变 |
| 68 | .quote-author { transition: opacity 0.3s; } | 同上,作者名的淡入淡出 |
| 84 | .btn { transition: transform 0.2s; } | 按钮位置变化时滑过去 |
transition: 属性 时长
opacity 0.3s = 透明度用0.3秒渐变
transform 0.2s = 位置用0.2秒滑动
JS 或 :hover 修改了 CSS 属性
→ transition 自动播放动画
opacity: 1 → opacity: 0
= 0.3秒内慢慢变透明
| 87-91 | .btn:hover { transform: translateY(-2px); } | 悬停时往上移2px(浮起来) |
| 89 | box-shadow: 0 8px 25px ... | 阴影变大,更有立体感 |
| 93-96 | .btn:active { transform: translateY(0); } | 点击时回到原位(按下去) |
translateY(-2px) = 往上移动2像素
translateY(0) = 回到原位
配合 transition: 0.2s 就有了滑动效果
鼠标按下按钮时触发
和 :hover(悬停)不同
:hover = 指着但不按
:active = 正在按着
✏️ 试试:改 -2px → -5px(浮得更高),改 0.2s → 0.5s(更慢)
和上节课比只有3处变化:
| 105-106 | id="quoteText" → "点击下方按钮..." | 初始文字变了,不再显示固定金句 |
| 109 | <button id="nextBtn"> | ⚠️ 新增了 id!JS 要靠它找到按钮 |
| 112 | <script> ... </script> | ⚠️ 新增了 <script> 标签!JS 写在这里 |
上节课用 class="btn" 给 CSS 用
这节课加 id="nextBtn" 给 JS 用
规律:CSS 用 class,JS 用 id
一个页面中 id 是唯一的(不能重复)
class 可以多个元素共用
放在 </body> 之前
浏览器先加载 HTML + CSS
再加载 JS → 才能找到元素
JS 里的注释用 //
浏览器会忽略注释
只给程序员看
const quotes = 一个叫"quotes"的盒子
= [ ... ] = 里面装了一个数组
const 表示这个盒子不能换成别的盒子
但盒子里面的内容可以变
用方括号包起来,逗号分隔,里面是8条金句
每条金句是一个对象
text: 文字 · author: 作者
用花括号包起来
🔑 取数据:quotes[0].text → "不积跬步..."
quotes[0].author → "荀子"
下标从 0 开始数!
document = 我们的网页
.getElementById = "帮我找到 id 是 xxx 的元素"
找到后存在变量里,后面就能操作它了
HTML 写 id="quoteText"
JS 写 getElementById('quoteText')
名字要完全一致,包括大小写!
Math.random() = 0~1的小数
× quotes.length = ×8 → 0~8的小数
Math.floor() = 向下取整 → 0~7的整数
最后 quotes[3] 或 quotes[7] ... 随机一条
函数算出了结果,用 return 把结果送出去
别人调用这个函数就能拿到返回值:
调用 getRandomQuote() 拿到一条随机金句
存在变量 q 里
通过 JS 修改元素的 CSS 属性
opacity: 0 = 完全透明(看不见)
opacity: 1 = 完全不透明
setTimeout(函数, 毫秒)
= "等200毫秒后再执行"
先淡出 → 换内容 → 再淡入
HTML: <div id="quoteText">点击下方按钮...</div>
↓ JS 执行后 ↓
HTML: <div id="quoteText">不积跬步...</div>
quoteText = 找到的元素
.textContent = "你的文字内容属性"
= q.text = 改成 q 对象的 text
nextBtn = 之前在132行找到的按钮
.addEventListener = "给我加个监听器"
'click' = "监听点击事件"
showRandomQuote = "点了就执行这个函数"
1️⃣ 用户点击按钮
2️⃣ JS 收到 'click' 事件
3️⃣ 执行 showRandomQuote
4️⃣ 里面调用 getRandomQuote
5️⃣ 拿到随机金句
6️⃣ 修改页面文字
7️⃣ 用户看到新的金句 ✨
基于上节课的 index.html 修改:
改 CSS 背景(第17行)— 纯色→渐变色
加 transition(第61/68/84行)— 加到金句和按钮上
加 :active(第93行)— 按钮点击效果
给按钮加 id — id="nextBtn"
加 <script> 标签(第112行)— 开始写 JS
写数组 + getElementById(第118-132行)— 存数据和找元素
写两个函数 + 事件绑定(第134-163行)— 逻辑和交互
在数组里加新条目,复制 { text: "...", author: "..." } 格式
改 linear-gradient 的颜色值
改 transition 的秒数和 setTimeout 的毫秒数
用 history 数组记住上一次的金句
✅ CSS 升级:渐变、transition、transform、:active
✅ <script> 标签放 JS
✅ const 变量声明
✅ 数组 [] 存多条数据
✅ 对象 {} 存一条数据的多个字段
✅ Math.random() + Math.floor() = 随机整数
✅ document.getElementById() 找到元素
✅ textContent 修改文字
✅ addEventListener 绑定点击事件
🎊 现在你的卡片会动了!点一下按钮试试 ✨
下节课预告 ☁️ 从互联网拿金句!