使用 localStorage (客户端计数)
这是最简单的方法,计数器数据存储在用户的浏览器本地,优点是无需服务器,缺点是用户更换浏览器或清除缓存后,计数会重置。

(图片来源网络,侵删)
实现原理
- 在页面加载时,尝试从
localStorage读取当前的计数值。 - 如果不存在(比如是第一次访问),则初始化计数值为 0。
- 将计数值加 1。
- 将新的计数值存回
localStorage。 - 在页面上显示这个计数值。
代码实现
HTML (index.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">JavaScript 访问计数器 (localStorage)</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f2f5;
}
.counter-container {
text-align: center;
background-color: white;
padding: 40px;
border-radius: 10px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h1 {
color: #333;
}
#visit-count {
font-size: 3em;
font-weight: bold;
color: #007bff;
margin: 20px 0;
}
</style>
</head>
<body>
<div class="counter-container">
<h1>欢迎访问!</h1>
<p>您是本站的第 <span id="visit-count">0</span> 位访客</p>
</div>
<script src="counter.js"></script>
</body>
</html>
JavaScript (counter.js)
// 1. 获取显示计数的 <span> 元素
const countElement = document.getElementById('visit-count');
// 2. 从 localStorage 中获取当前计数值
// 如果没有找到,则默认为 0
let count = parseInt(localStorage.getItem('visitCount')) || 0;
// 3. 计数器加 1
count++;
// 4. 将新的计数值保存回 localStorage
localStorage.setItem('visitCount', count);
// 5. 在页面上更新显示
countElement.textContent = count;
// (可选) 为了演示效果,可以打印到控制台
console.log(`当前访问次数: ${count}`);
如何使用
- 将上面的 HTML 代码保存为
index.html。 - 将上面的 JavaScript 代码保存为
counter.js,并与index.html放在同一个文件夹下。 - 用浏览器打开
index.html,你会看到计数显示为 1。刷新页面,计数会变成 2,3,4... 这是因为localStorage是按域名存储的,只要你不关闭浏览器或清除数据,它就会一直存在。
使用服务器端 (Node.js + Express) (真实计数)
如果你想记录所有用户的访问次数,而不是单个用户的访问次数,就必须使用服务器,这里我们使用 Node.js 和 Express 框架来演示。

(图片来源网络,侵删)
实现原理
- 创建一个 Node.js 服务器。
- 服务器上有一个文件(如
count.txt)或一个数据库(如 SQLite)来存储计数值。 - 当用户访问网页时,网页会通过 AJAX 请求服务器,请求获取并更新计数。
- 服务器收到请求后,读取当前计数值,加 1,然后写回文件/数据库,并将新值返回给客户端。
- 客户端接收到新值后,更新页面显示。
步骤 1: 项目初始化
# 创建一个新文件夹并进入 mkdir server-counter cd server-counter # 初始化 Node.js 项目 npm init -y # 安装 Express 框架 npm install express
步骤 2: 创建服务器文件 (server.js)
const express = require('express');
const fs = require('fs').promises; // 使用 Promise 版本的 fs
const path = require('path');
const app = express();
const port = 3000;
// 用于存储计数的文件路径
const countFilePath = path.join(__dirname, 'count.txt');
// 一个中间件,用于提供静态文件(如你的 HTML、CSS、JS)
app.use(express.static(__dirname));
// API 端点:处理计数请求
app.get('/api/count', async (req, res) => {
try {
// 尝试读取当前计数值
let count;
try {
const data = await fs.readFile(countFilePath, 'utf-8');
count = parseInt(data, 10);
} catch (error) {
// 如果文件不存在或读取失败,说明是第一次,从 0 开始
if (error.code === 'ENOENT') {
count = 0;
} else {
throw error; // 其他错误则抛出
}
}
// 计数器加 1
count++;
// 将新的计数值写回文件
await fs.writeFile(countFilePath, count.toString(), 'utf-8');
// 将新计数返回给客户端
res.json({ count });
} catch (error) {
console.error('Error updating count:', error);
res.status(500).json({ error: 'Failed to update count' });
}
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
步骤 3: 修改前端 HTML (index.html)
我们将使用 fetch API 来从服务器获取计数。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">JavaScript 访问计数器 (服务器端)</title>
<!-- CSS 样式可以复用上面的 -->
<style>
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f2f5; }
.counter-container { text-align: center; background-color: white; padding: 40px; border-radius: 10px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); }
h1 { color: #333; }
#visit-count { font-size: 3em; font-weight: bold; color: #28a745; margin: 20px 0; }
</style>
</head>
<body>
<div class="counter-container">
<h1>欢迎访问!(服务器版)</h1>
<p>本站总访问次数: <span id="visit-count">加载中...</span></p>
</div>
<script>
const countElement = document.getElementById('visit-count');
// 使用 fetch API 从服务器获取计数
fetch('/api/count')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => {
// 从服务器返回的数据中获取 count 并显示
countElement.textContent = data.count;
})
.catch(error => {
console.error('Error fetching count:', error);
countElement.textContent = '获取失败';
});
</script>
</body>
</html>
步骤 4: 运行项目
- 确保你的文件夹中有
server.js和index.html。 - 在终端中运行:
node server.js
- 打开浏览器,访问
http://localhost:3000。 - 每次刷新页面或在新的浏览器标签页中打开,计数都会增加,这代表的是所有访问者的总次数。
使用第三方服务 (FreeCounters.net)
如果你不想自己搭建服务器,可以使用免费的第三方计数器服务,这是一种非常省事的方法。
实现原理
- 注册一个免费计数器服务账号(FreeCounters.net)。
- 按照服务指引,获取一段 HTML 或 JavaScript 代码。
- 将这段代码直接粘贴到你的 HTML 网页中即可。
优点
- 无需维护:服务器、数据存储、安全等所有问题都由服务商处理。
- 功能丰富:通常提供详细的数据统计、图表、IP来源分析等。
- 简单快捷:几行代码就能搞定。
缺点
- 依赖第三方:服务商可能倒闭或停止服务。
- 可能带有广告:一些免费服务会在计数器旁显示广告。
- 自定义性差:样式和功能受服务商限制。
总结与对比
| 特性 | 方法一: localStorage |
方法二: 服务器端 | 方法三: 第三方服务 |
|---|---|---|---|
| 实现难度 | 非常简单 | 中等 (需要 Node.js 知识) | 非常简单 |
| 数据存储 | 用户本地浏览器 | 服务器文件/数据库 | 第三方服务器 |
| 计数范围 | 单个用户的访问次数 | 所有用户的总访问次数 | 所有用户的总访问次数 |
| 真实有效性 | 低 (用户可重置) | 高 | 高 |
| 是否需要服务器 | 否 | 是 | 否 |
| 适用场景 | 个人练习、临时展示、单页应用体验 | 个人博客、小型网站、需要真实统计的项目 | 对技术不熟悉的个人、快速搭建 |
如何选择?
- 只是想学 JS 或做个简单的演示:用 方法一。
- 想在自己的网站上展示真实的访问量:用 方法二 (学习 Node.js 的好机会) 或 方法三 (省时省力)。

(图片来源网络,侵删)
