Skip to content

HTML5 新特性

HTML5 简介

HTML5是HTML的最新版本,引入了许多新特性和API,使Web开发更加简单和强大。

语义化标签

新增语义化标签

html
<header>页眉</header>
<nav>导航</nav>
<main>主要内容</main>
<article>文章</article>
<section>章节</section>
<aside>侧边栏</aside>
<footer>页脚</footer>
<figure>图表</figure>
<figcaption>图表说明</figcaption>
<time>时间</time>
<mark>标记</mark>
<progress>进度条</progress>
<meter>度量衡</meter>

新增表单元素和属性

新增输入类型

html
<!-- 颜色选择器 -->
<input type="color" name="color" value="#ff0000">

<!-- 日期选择器 -->
<input type="date" name="date">
<input type="time" name="time">
<input type="datetime-local" name="datetime">
<input type="month" name="month">
<input type="week" name="week">

<!-- 数字输入 -->
<input type="number" name="number" min="0" max="100" step="1">

<!-- 范围选择 -->
<input type="range" name="range" min="0" max="100" value="50">

<!-- 邮箱输入 -->
<input type="email" name="email" required>

<!-- URL输入 -->
<input type="url" name="url">

<!-- 电话输入 -->
<input type="tel" name="tel">

<!-- 搜索输入 -->
<input type="search" name="search" placeholder="搜索...">

新增表单属性

html
<!-- 自动完成 -->
<input type="text" name="username" autocomplete="username">

<!-- 自动聚焦 -->
<input type="text" name="username" autofocus>

<!-- 必填 -->
<input type="text" name="username" required>

<!-- 最小/最大长度 -->
<input type="text" name="username" minlength="3" maxlength="20">

<!-- 最小/最大值 -->
<input type="number" name="age" min="0" max="120">

<!-- 正则表达式验证 -->
<input type="text" name="phone" pattern="^1[3-9]\d{9}$">

<!-- 占位符 -->
<input type="text" name="username" placeholder="请输入用户名">

<!-- 只读 -->
<input type="text" name="username" value="只读" readonly>

<!-- 禁用 -->
<input type="text" name="username" disabled>

<!-- 多选 -->
<input type="file" name="files" multiple>

<!-- 列表 -->
<input list="browsers" name="browser">
<datalist id="browsers">
  <option value="Chrome">
  <option value="Firefox">
  <option value="Safari">
  <option value="Edge">
</datalist>

新增多媒体元素

Video 和 Audio

html
<!-- 视频 -->
<video controls width="640" height="360">
  <source src="video.mp4" type="video/mp4">
  <source src="video.webm" type="video/webm">
  您的浏览器不支持视频播放
</video>

<!-- 音频 -->
<audio controls>
  <source src="audio.mp3" type="audio/mpeg">
  <source src="audio.ogg" type="audio/ogg">
  您的浏览器不支持音频播放
</audio>

Canvas 和 SVG

html
<!-- Canvas -->
<canvas id="myCanvas" width="400" height="300">
  您的浏览器不支持Canvas
</canvas>

<!-- SVG -->
<svg width="100" height="100">
  <circle cx="50" cy="50" r="40" fill="red" />
</svg>

新增API

1. Geolocation API

javascript
// 获取当前位置
navigator.geolocation.getCurrentPosition(
  function(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    console.log(`纬度: ${latitude}, 经度: ${longitude}`);
  },
  function(error) {
    console.error('获取位置失败:', error.message);
  }
);

// 持续监控位置变化
const watchId = navigator.geolocation.watchPosition(
  function(position) {
    console.log('位置变化:', position.coords);
  }
);

// 停止监控
navigator.geolocation.clearWatch(watchId);

2. LocalStorage 和 SessionStorage

javascript
// LocalStorage - 永久存储
localStorage.setItem('username', '张三');
localStorage.setItem('age', '25');

const username = localStorage.getItem('username');
const age = localStorage.getItem('age');

localStorage.removeItem('username');
localStorage.clear();

// SessionStorage - 会话存储
sessionStorage.setItem('token', 'abc123');
const token = sessionStorage.getItem('token');
sessionStorage.removeItem('token');
sessionStorage.clear();

3. Web Workers

javascript
// 主线程
const worker = new Worker('worker.js');

worker.postMessage({ data: 'Hello Worker' });

worker.onmessage = function(e) {
  console.log('收到Worker消息:', e.data);
};

worker.onerror = function(error) {
  console.error('Worker错误:', error.message);
};

// worker.js
self.onmessage = function(e) {
  const result = e.data.data + ' - Processed';
  self.postMessage(result);
};

4. WebSocket

javascript
// 创建WebSocket连接
const socket = new WebSocket('ws://localhost:8080');

// 连接打开
socket.onopen = function() {
  console.log('WebSocket连接已打开');
  socket.send('Hello Server');
};

// 接收消息
socket.onmessage = function(e) {
  console.log('收到消息:', e.data);
};

// 连接关闭
socket.onclose = function() {
  console.log('WebSocket连接已关闭');
};

// 连接错误
socket.onerror = function(error) {
  console.error('WebSocket错误:', error);
};

// 关闭连接
socket.close();

5. Fetch API

javascript
// GET请求
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

// POST请求
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: '张三', age: 25 })
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

// 带认证的请求
fetch('https://api.example.com/protected', {
  headers: {
    'Authorization': 'Bearer token123'
  }
})
  .then(response => response.json())
  .then(data => console.log(data));

6. History API

javascript
// 添加历史记录
history.pushState({ page: 'home' }, '首页', '/home');

// 替换当前历史记录
history.replaceState({ page: 'about' }, '关于', '/about');

// 监听历史记录变化
window.onpopstate = function(event) {
  console.log('状态:', event.state);
};

// 前进/后退
history.back();
history.forward();
history.go(-1);

7. Notification API

javascript
// 请求通知权限
Notification.requestPermission().then(permission => {
  if (permission === 'granted') {
    new Notification('通知标题', {
      body: '通知内容',
      icon: 'icon.png'
    });
  }
});

// 检查权限
if (Notification.permission === 'granted') {
  new Notification('通知标题', {
    body: '通知内容'
  });
}

8. File API

javascript
// 文件上传
<input type="file" id="fileInput" multiple>

const fileInput = document.getElementById('fileInput');

fileInput.addEventListener('change', function(e) {
  const files = e.target.files;
  
  for (let i = 0; i < files.length; i++) {
    const file = files[i];
    console.log('文件名:', file.name);
    console.log('文件大小:', file.size);
    console.log('文件类型:', file.type);
    console.log('最后修改时间:', file.lastModified);
    
    // 读取文件内容
    const reader = new FileReader();
    reader.onload = function(e) {
      console.log('文件内容:', e.target.result);
    };
    reader.readAsText(file);
  }
});

9. Drag and Drop API

html
<div id="dropZone" 
     style="width: 300px; height: 200px; border: 2px dashed #ccc;">
  拖拽文件到此处
</div>

<script>
const dropZone = document.getElementById('dropZone');

dropZone.addEventListener('dragover', function(e) {
  e.preventDefault();
  dropZone.style.borderColor = '#000';
});

dropZone.addEventListener('dragleave', function(e) {
  e.preventDefault();
  dropZone.style.borderColor = '#ccc';
});

dropZone.addEventListener('drop', function(e) {
  e.preventDefault();
  dropZone.style.borderColor = '#ccc';
  
  const files = e.dataTransfer.files;
  console.log('拖拽的文件:', files);
});
</script>

10. Clipboard API

javascript
// 复制文本
navigator.clipboard.writeText('要复制的文本')
  .then(() => console.log('复制成功'))
  .catch(err => console.error('复制失败:', err));

// 读取剪贴板
navigator.clipboard.readText()
  .then(text => console.log('剪贴板内容:', text))
  .catch(err => console.error('读取失败:', err));

其他新特性

1. Data Attributes

html
<div data-id="123" data-name="张三" data-age="25">
  自定义数据
</div>

<script>
const element = document.querySelector('div');
const id = element.dataset.id;
const name = element.dataset.name;
const age = element.dataset.age;

console.log(id, name, age);
</script>

2. Content Editable

html
<div contenteditable="true">
  这是一个可编辑的div
</div>

<p contenteditable="true">
  这是一个可编辑的段落
</p>

3. Hidden Attribute

html
<div hidden>
  这个元素是隐藏的
</div>

4. Autocomplete

html
<form autocomplete="on">
  <input type="text" name="username" autocomplete="username">
  <input type="email" name="email" autocomplete="email">
  <input type="password" name="password" autocomplete="new-password">
</form>

面试常见问题

1. HTML5有哪些新特性?

  • 语义化标签
  • 新增表单元素和属性
  • 多媒体元素(video、audio)
  • Canvas和SVG
  • Web Storage(localStorage、sessionStorage)
  • Web Workers
  • WebSocket
  • Geolocation API
  • History API
  • Notification API
  • File API
  • Drag and Drop API
  • Clipboard API

2. localStorage 和 sessionStorage 的区别?

  • localStorage: 永久存储,除非手动清除
  • sessionStorage: 会话存储,关闭浏览器后清除
javascript
localStorage.setItem('key', 'value');
sessionStorage.setItem('key', 'value');

3. WebSocket 和 HTTP 的区别?

  • WebSocket: 双向通信,实时性高,连接保持
  • HTTP: 请求-响应模式,单向通信,无状态
javascript
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = function(e) {
  console.log(e.data);
};

4. Web Workers 的作用?

Web Workers允许在后台线程中运行JavaScript,不会阻塞主线程,提高性能。

javascript
const worker = new Worker('worker.js');
worker.postMessage({ data: 'Hello' });
worker.onmessage = function(e) {
  console.log(e.data);
};

5. History API 的作用?

History API允许操作浏览器的历史记录,实现单页应用的路由功能。

javascript
history.pushState({ page: 'home' }, '首页', '/home');
window.onpopstate = function(e) {
  console.log(e.state);
};

通过理解HTML5的新特性和API,可以构建更加强大和现代化的Web应用。

好好学习,天天向上