颜色切换器
入门约 10 分钟
你将构建什么
一个颜色切换器:页面有一个“换颜色”按钮,点击后背景色随机变为一个新颜色,同时显示当前颜色的十六进制值。
学习目标
- 用 Math.random 生成随机 RGB 值
- 把 RGB 转换为十六进制颜色字符串
- 用 element.style 修改元素样式
- 理解事件驱动和样式操作
前置要求
- 了解 JavaScript 基础语法
- 了解 DOM 操作
- 已完成“计数器”项目或具备同等基础
步骤
- 1
搭建 HTML 结构
HTML 中放一个“换颜色”按钮和一个显示当前颜色值的 span。
代码<button id="change-color">换颜色</button> <p>当前颜色:<span id="color-value">#ffffff</span></p>预期结果
页面显示按钮和颜色值文本。
提示
初始颜色值显示 #ffffff(白色),和默认背景一致。
- 2
生成随机十六进制颜色
编写函数生成随机颜色:用 Math.random 生成 0 到 16777215(0xffffff)的整数,转成十六进制字符串,前面加 #。
代码function randomColor() { const num = Math.floor(Math.random() * 0xffffff); return '#' + num.toString(16).padStart(6, '0'); }预期结果
调用 randomColor() 返回类似 #3a2bf1 的六位十六进制颜色。
提示
padStart(6, '0') 确保不足六位时前面补零,如 #00ff00 而非 #ff00。
- 3
绑定按钮事件切换背景
获取按钮和颜色值元素,给按钮绑定 click 事件:调用 randomColor 生成新颜色,设置 body 背景色,更新 span 显示。
代码const btn = document.querySelector('#change-color'); const colorValueEl = document.querySelector('#color-value'); btn.addEventListener('click', () => { const color = randomColor(); document.body.style.backgroundColor = color; colorValueEl.textContent = color; });预期结果
点击按钮背景色随机变化,颜色值同步更新。
提示
element.style.backgroundColor 修改内联样式,优先级高于 CSS 类。
- 4
优化:避免连续相同颜色
记录上一次的颜色,如果新生成的和上次相同就再生成一次。避免点击后“没变化”的体验。
代码let lastColor = '#ffffff'; btn.addEventListener('click', () => { let color; do { color = randomColor(); } while (color === lastColor); lastColor = color; document.body.style.backgroundColor = color; colorValueEl.textContent = color; });预期结果
每次点击背景色都会变化,不会连续两次相同。
提示
十六进制颜色共有 16777216 种,重复概率极低,但加上检查更稳妥。
自己动手试试
起始代码
<button id="change-color">换颜色</button>
<p>当前颜色:<span id="color-value">#ffffff</span></p>
<script>
// TODO: randomColor() + 绑定按钮事件
</script>解决方案代码
<button id="change-color">换颜色</button>
<p>当前颜色:<span id="color-value">#ffffff</span></p>
<script>
function randomColor() {
const num = Math.floor(Math.random() * 0xffffff);
return '#' + num.toString(16).padStart(6, '0');
}
const btn = document.querySelector('#change-color');
const colorValueEl = document.querySelector('#color-value');
let lastColor = '#ffffff';
btn.addEventListener('click', () => {
let color;
do {
color = randomColor();
} while (color === lastColor);
lastColor = color;
document.body.style.backgroundColor = color;
colorValueEl.textContent = color;
});
</script>你学到了什么
你学会了生成随机颜色、操作元素样式——前端交互经常需要动态修改样式。理解 RGB 和十六进制颜色的转换对后续做可视化很有帮助。
相关资源
相关术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
相关错误
用大白话解释常见错误——什么意思、为什么发生、如何修复。
- 无法读取 null 的属性
常见错误及解决方法。