让页面听你的:JS 交互入门
事件、状态、时间线——让页面从「能看」变成「能玩」。
学习证据 学完后,怎么核对?
把学习结果留在一个可以回看、可以复做的动作里;这一区只写学生能自己检查的证据。
如何核对
- 可离线运行的网页产物
- 功能与无障碍验收
适用边界
用于静态网页与基础交互;生产网站还需安全、性能、兼容性和部署流程。
最后复核
这是内容复核日期,不是学习截止日期。
讲
例子那张「点一下翻面」的卡,拆开看看
朵朵想给自己的 studio 也加一张像本站这样「点一下翻面」的复习卡。她把 AI 给的代码贴进去——没反应。盯着页面许愿没有用:页面不听愿望,只听一套固定的循环。这节课就把那张卡拆开,看页面到底在听什么。
初中站回看:让页面动起来 —— 那时用「当……就……」把玩法说给 AI 听;现在给这句话装上三个学名:事件、状态、重绘。名词三个词记牢:事件=页面上发生的事(点击、输入、滚动);状态=程序记住的「当下是什么样」,通常存在变量里;时间线=让几件事按顺序发生的安排。
定义交互=事件 → 状态 → 重绘的循环
一切交互都是这三拍:事件触发(用户点了一下)→ 状态更新(变量记下新值)→ 重绘(把新状态画回页面)。用户看到新画面,再点一下,循环重来:
三拍循环是一切交互的骨架——这页的选择题、复习卡、点亮按钮,全是它。
最小的完整例子,一个会计数的赞按钮:
<button id="btn">赞 0</button>
<script>
var n = 0; // 状态:程序记住的当下
document.getElementById('btn')
.addEventListener('click', function(){ // 事件:当按钮被点
n = n + 1; // 状态更新
this.textContent = '赞 ' + n; // 重绘:把状态画回页面
});
</script>
| 常用事件 | 什么时候响 | 典型用途 |
|---|---|---|
click | 点了一下 | 按钮、翻面卡、点亮 |
input | 输入框或滑杆的值变了 | 实时预览、参数滑杆 |
keydown | 按下键盘某个键 | 快捷键、小游戏操控 |
第三个词时间线先挂个号:交互不只「一问一答」,还能让几件事按顺序发生——setTimeout(等一会儿再做)就是最小的时间线。真正的编排功夫,2.2d 正面开讲。最后一条铁律:改交互之前,先写一句预测——「点第三下,按钮该显示什么」。写了预测再动手,调试就从抓瞎变成了做实验。
泛化换个角度:三拍循环是一切互动系统的骨架
游戏是「按键→血量变化→画面刷新」,电梯是「按钮→目标楼层入队→轿厢运行」,自动售货机是「投币→余额更新→出货亮灯」——凡是「你动它一下、它有反应」的系统,拆开都是事件、状态、重绘。看懂这个循环,你不但能拆任何交互,还能把 bug 报得像工程师:不说「按钮坏了」,而说「事件挂上了、状态也变了,是画面没刷」——给编程智能体这样报障,它一次就能修对地方。
例
补充三例——两个常见用法,一个易错。
朵朵没有再瞎贴代码,先拆本站的复习卡:事件=click;状态=「翻没翻」,就是卡片身上一个有无 class 的开关;重绘=CSS 看到那个 class 就把卡转 180°。拆明白后她给智能体交任务单:「做一张同款翻面卡」,验收标准就一条——指给我看:三拍各在哪一行。这回一次通过,而且她真的看懂了。
阿凯给页面做了个字号滑杆(input 事件)。他给自己立规矩:每改一处,先写预测——「拖到最右,正文该是 32px」。第二次预测落空:滑杆动了,字没变。他没乱试,顺着三拍查:事件响了(控制台有输出)、状态变了(变量在涨),那就是重绘那拍断了——果然少写了把新字号赋回页面的那一行。预测在先,落空才有信息量:它把「哪拍断了」直接指给你。
大鹏把 <script> 放在 <head> 里,代码跑的时候按钮还没「出生」,getElementById 抓了个空,事件根本没挂上——按钮从此聋着。他盯着页面刷新了二十次,却没按 F12。错在哪:一是脚本先于元素执行,二是控制台第一行红字早把出错行号写明白了,他没看。修法:script 挂在 body 末尾(或加 defer);页面不对劲,第一反应永远是 F12 看控制台——那是页面在向你报案。
做
「点一下,赞数加一」这个交互里,哪一个是「状态」?
studio,任务单限定“只改 script.js”;命令和 diff 先读懂再放行。控制台截图先遮住用户名、路径和密钥;没有账号就按示例手写代码,照样能完成三拍验收。- 先写三行预测:第一次点它显示什么?第五次点呢?刷新页面之后呢?
- 照本课代码(或交给编程智能体,任务单四项写全)在 script.js 里做一个「到此一游 +1」按钮。
- 按 F12 打开控制台,确认零红字;然后指着代码说出三拍各在哪一行。
- 对照预测验收,git 拍一张快照;把预测和实际的出入写进 notes/。
怎么算过关:按钮计数正常、控制台零红字、三拍说得出各在哪行;「刷新后归零」这条和你的预测对上了吗——归零是因为状态住在内存里,这个发现本身就是收获。
卡
交互的三拍是什么?改交互前的铁律是哪句?
事件触发→状态更新→画面重绘,循环往复。铁律:先写一句预测再动手——预测落空时,顺着三拍就能定位是哪一拍断了。
- 页面不听愿望,只听挂在事件上的指令——交互=事件→状态→重绘。
- 先写预测再动手:落空的预测最值钱,它指出断在哪一拍。
- 页面不对劲先按 F12:控制台第一行红字,就是报案记录。