pengzhanbo 5de60d4d6e feat(theme): plume-theme next devloping !
add plugin-auto-frontmatter | add plugin-blog-data | devloping new theme
2022-10-19 02:30:20 +08:00

276 lines
7.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: HTML5新特性
createTime: 2022-03-26T11:46:50.025Z
permalink: /article/8rv45yuy
author: pengzhanbo
tags:
- html
top: false
type: null
---
## 语义标签
`<header>` `<footer>` `<nav>` `<section>` `<article>` `<aside>` `<details>` `<summary>` `<dialog>` ` <figure>` `<main>` `<mark>` `<time>` `<hgroup>`
## 增强型表单
### 新增表单元素
`<detailist>` 数据列表为input提供输入建议列表
`<progress>`:进度条,展示连接/下载进度
`<meter>`:刻度尺/度量衡,描述数据所处的阶段,红色(危险)=>黄色(警告)=>绿色(优秀)
`<output>`:输出内容,语义上表示此处的数据是经过计算而输出得到的
其他
### 新增表单属性
placehoder 输入框默认提示文字
required 要求输入的内容是否可为空
pattern 描述一个正则表达式验证输入的值
min/max 设置元素最小/最大值
step 为输入域规定合法的数字间隔
height/wdith 用于image类型`<input>`标签图像高度/宽度
autofocus 规定在页面加载时,域自动获得焦点
multiple 规定`<input>`元素中可选择多个值
### 新增 input type 类型
color 颜色选取
date 日期选择
datetime 日期选择UTC时间
datetime-local 日期选择(无时区)
month 月份选择
week 周和年 选择
time 选择时间
email 包含 email的地址输入域
number: 数值选择
url url输入域
tel 电话号码和字段
search 搜索域
range 数字范围输入域
## 视频和音频
`<audio>` 音频元素
```html
<audio controls>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
您的浏览器不支持 audio 元素
</audio>
```
`<video>` 视频元素
```html
<video width="320" height="240" controls>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
您的浏览器不支持Video标签。
</video>
```
## Canvas绘图
`<canvas>` 是 HTML5 新增的,一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。
[](https://www.runoob.com/w3cnote/html5-canvas-intro.html)
## 地理位置
使用getCurrentPosition()方法来获取用户的位置。以实现“LBS服务”
```jsx
window.navigator.geolocation : {
  watchPosition(){},
  clearWatch(){},
  getCurrentPosition(function(pos){
    // '定位成功'
    // 定位时间pos.timestamp
    // 维度pos.coords.latitude
    // 经度pos.coords.longitude
    // 海拔pos.coords.altitude
    // 速度pos.coods.speed
  }, function(err){
    // '定位失败'
  }){},
}
```
## 拖放API
### 拖动的源对象(source)可能触发的事件:
**dragstart**:拖动开始
**drag**:拖动中
**dragend**:拖动结束
### 拖动的目标对象(target)可能触发的事件:
**dragenter**:拖动进入
**dragover**:拖动悬停
**drop**:松手释放
**dragleave**:拖动离开
拖放API事件句柄中所有的事件对象都有一个dataTransfer属性数据运输对象用于在源对象和目标对象间传递数据。
**源对象**event.dataTransfer.setData(key, value)
**目标对象**var value = event.dataTransfer.getData(key)
## WebWorker
[使用 Web Workers - Web API 接口参考 | MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers)
### 背景
Chrome浏览器中发起资源请求的有6个线程但是只有1个线程负责渲染页面——称为UI主线程——浏览器中所有的代码只能由一个线程来执行。
### 问题
若浏览器加载了一个很耗时的JS文件(可能影响DOM树结构),浏览器必须等待该文件执行完成才会继续执行后续的代码(HTML/CSS/JS等)——如果一个JS文件要执行10s(可能有很深的循环/递归等科学计算/解密)会发生什么——执行耗时JS任务过程中会暂停页面中一切内容的渲染以及事件的处理。
### 作用
一个执行指定任务的独立线程且该线程可以与UI主线程进行消息数据传递。
使用方式:
```jsx
// 主线程
var worker = new Worker('xx.js')
worker.postMessage('message') // 发送消息到worker线程
worker.onmessage = function (e) {
console.log(e.data) // 来自worker线程的信息
}
// worker线程
onmessage = function (e) {
console.log(e.data) // 接收主线程的消息
postMessage('message') // 发送消息到主线程
}
```
### 共享 worker
一个共享worker可以被多个脚本使用——即使这些脚本正在被不同的window、iframe或者worker访问。
> 如果共享worker可以被多个浏览上下文调用所有这些浏览上下文必须属于同源相同的协议主机和端口号
>
```jsx
var myWorker = new SharedWorker('worker.js');
// 主线程中调用
myWorker.port.start()
myWorker.port.postMessage('message');
myWorker.port.onmessage = function(e) {
console.log('Message received from worker');
}
// worker 线程调用
port.start();
// worker 需要在 onconnect事件处理函数来执行代码
onconnect = function(e) {
var port = e.ports[0];
port.onmessage = function(e) {
var workerResult = 'Result: ' + (e.data);
port.postMessage(workerResult);
}
}
```
## WebStorage
### localStorage
本地跨会话级,持久化存储
### sessionStorage
会话级存储
## WebSocket
在用户的浏览器和服务器之间打开交互式通信会话。
```jsx
const ws = new WebSocket('wx://xx')
ws.onopen = function () {}
ws.onmessage = function (e) {
console.log(e.data)
}
```
## History API
对history栈中内容进行操作。
### pushState(stateObj, title, url)
```jsx
history.pushState({}, 'foo', 'foo.html')
```
添加历史记录条目
### replaceState(stateObj, title, url)
```jsx
history.replaceState({}, 'bar', 'bar.html')
```
修改历史记录条目,浏览器不会检查替换的路径是否存在。
### popState 事件
每当活动的历史记录项发生变化时, popstate 事件都会被传递给window对象。如果当前活动的历史记录项是被 pushState 创建的,或者是由 replaceState 改变的,那么 popstate 事件的状态属性 state 会包含一个当前历史记录状态对象的拷贝。
### 获取当前状态
页面加载时或许会有个非null的状态对象。这是有可能发生的举个例子假如页面通过pushState() 或 replaceState() 方法设置了状态对象而后用户重启了浏览器。那么当页面重新加载时页面会接收一个onload事件但没有 popstate 事件。然而假如你读取了history.state属性你将会得到如同popstate 被触发时能得到的状态对象。
```jsx
// 尝试通过 pushState 创建历史条目,然后再刷新页面查看state状态对象变化;
window.addEventListener('load',() => {
let currentState = history.state;
console.log('currentState',currentState);
})
```
[History API - Web API 接口参考 | MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/History_API)