适用于:手机浏览器、微信公众号、小程序 WebView、App 内嵌页等场景
📚 目录
- 前置知识准备
- 项目初始化与技术选型
- H5 页面结构搭建
- 移动端适配方案
- 常用功能开发
- 性能优化策略
- 调试与测试
- 部署与发布
- 常见问题与解决方案
- 推荐工具 & 资源
1. 前置知识准备
✅ 必备技能
| 技术 | 说明 |
|---|
| HTML5 | 结构标签、语义化、音视频支持 |
| CSS3 | 动画、过渡、Flex 布局、媒体查询 |
| JavaScript(ES6+) | DOM 操作、事件处理、Promise、async/await |
| 浏览器原理 | 渲染流程、重绘重排、事件循环 |
🔧 工具掌握
- 编辑器:VS Code(推荐)
- 包管理:npm / yarn
- 浏览器开发者工具(Chrome DevTools)
- Git 版本控制
2. 项目初始化与技术选型
方式一:纯静态 H5(适合简单活动页)
mkdir my-h5-project
cd my-h5-project
touch index.html style.css main.js
方式二:使用现代构建工具(推荐中大型项目)
推荐框架/工具链:
| 场景 | 推荐方案 |
|---|
| 简单活动页 | Vite + Vue 或 React |
| 复杂交互 | Vue3 + Vite 或 React + Vite |
| 极致轻量 | 原生 JS + PostCSS + Rollup |
初始化 Vite 项目(以 Vue 为例):
npm create vue@latest
npm create vite@latest my-h5 --template vue
cd my-h5
npm install
npm run dev
3. H5 页面结构搭建
index.html 基础模板
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="format-detection" content="telephone=no,email=no" />
<title>我的H5页面</title>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<div id="app">
<h1>欢迎来到H5世界</h1>
<button onclick="alert('点击')">点我</button>
</div>
<script src="./main.js"></script>
</body>
</html>
关键 meta 标签说明:
| meta | 作用 |
|---|
viewport | 控制缩放,适配移动端 |
format-detection | 禁用自动识别电话号码/邮箱 |
apple-mobile-web-app-capable | 全屏模式(可选) |
4. 移动端适配方案
✅ 推荐方案:rem + flexible.js / postcss-pxtorem
方法一:使用 postcss-pxtorem(推荐)
安装:
npm install postcss-pxtorem -D
配置 postcss.config.js:
module.exports = {
plugins: {
'postcss-pxtorem': {
rootValue: 37.5,
propList: ['*']
}
}
}
示例:写 font-size: 16px → 自动转为 font-size: 0.426667rem
方法二:动态设置 rem(兼容老项目)
引入 lib-flexible(已不维护,可用 handy-css 替代)
或手动 JS 设置:
function setRem() {
const designWidth = 375
const scale = document.documentElement.clientWidth / designWidth
document.documentElement.style.fontSize = (scale * 100) + 'px'
}
window.addEventListener('resize', setRem)
setRem()
5. 常用功能开发
✅ 常见需求实现
| 功能 | 实现方式 |
|---|
| 下拉刷新 | 自定义监听 touch 事件或使用 better-scroll |
| 上拉加载 | 同上 |
| 图片懒加载 | 使用 loading="lazy" 或 Intersection Observer API |
| 分享功能 | 微信 JS-SDK(需后端签名) |
| 拍照/上传图片 | <input type="file" accept="image/*" capture="camera"> |
| 定位 | navigator.geolocation.getCurrentPosition() |
| 播放音频 | <audio> 标签 + 自动播放兼容处理 |
| 屏幕旋转监听 | window.orientationchange 或 screen.orientation |
示例:自动播放音频(兼容 iOS)
function autoPlayAudio() {
const audio = document.getElementById('bg-music');
audio.play();
document.addEventListener('touchstart', function() {
audio.play();
}, { once: true });
}
window.addEventListener('load', autoPlayAudio);
6. 性能优化策略
| 优化项 | 措施 |
|---|
| 首屏加载快 | 图片压缩、代码分割、预加载关键资源 |
| 减少白屏 | 内联关键 CSS、骨架屏 |
| 资源压缩 | 使用 Gzip/Brotli,Webpack/Vite 压缩 |
| 图片优化 | WebP 格式、懒加载、CDN 加速 |
| 缓存策略 | 设置强缓存(Cache-Control)、协商缓存 |
| 减少重排重绘 | 使用 transform/opacity 做动画 |
| 第三方脚本延迟加载 | 如统计代码异步加载 |
7. 调试与测试
🛠️ 调试方法
| 平台 | 方法 |
|---|
| Android | Chrome DevTools 远程调试(USB连接) |
| iOS | Safari Web Inspector(需开启开发者模式) |
| 微信内 | vConsole 插件(线上调试神器) |
引入 vConsole(方便线上 debug)
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
<script>
new window.VConsole()
</script>
🧪 测试清单
- 在主流机型测试(iPhone、华为、小米、OPPO)
- 横竖屏切换是否正常
- 网络慢时加载状态
- 微信/QQ/浏览器兼容性
- 字体在不同系统显示效果
8. 部署与发布
步骤:
- 构建生产包:
npm run build
- 上传至服务器(推荐 CDN):
-
- 阿里云 OSS + CDN
- 腾讯云 COS
- Netlify / Vercel(国际项目)
- 配置 MIME 类型(确保
.js, .css 正确加载)
- 添加
robots.txt 和 favicon.ico(提升专业度)
- 设置 HTTPS(必须!否则部分 API 不可用)
9. 常见问题与解决方案
| 问题 | 解决方案 |
|---|
| 页面缩放异常 | 检查 viewport 是否正确 |
| 图片模糊 | 使用 2x/3x 图或 rem 适配 |
| 点击穿透 | 使用 fastclick 库或 pointer-events |
| 键盘弹起遮挡输入框 | 监听 focus 事件滚动定位 |
| iOS 上下滑动卡顿 | 添加 -webkit-overflow-scrolling: touch |
| 微信分享失败 | 检查 JS-SDK 签名、引入 wx.config |
| 自动播放失败 | 用户手势触发一次后再 play |
10. 推荐工具 & 资源
🔧 工具推荐
📚 学习资源
- MDN Web Docs(权威文档)
- 《JavaScript 高级程序设计》
- 掘金、思否、CSDN 社区
- B站搜索:“H5 移动端开发实战”
✅ 小结:H5 开发流程图
需求分析 → UI设计 → 技术选型 → 编码开发 → 本地调试 →
真机测试 → 性能优化 → 打包部署 → 线上监控 → 迭代更新
💡 附加建议
- 使用组件化思维(即使不用框架)
- 提前和后端约定接口格式(RESTful / GraphQL)
- 写好 README.md 便于团队协作
- 使用 ESLint + Prettier 统一代码风格