HTML-HTML5新特性

loading 2023年01月09日 50次浏览

1.语义标签

语义化标签使得页面的内容结构化,见名知义。

2. 增强型表单

HTML5拥有多个新的表单输入类型,表单元素和表单属性,提供了更好的输入控制和验证。

  • 表单输入类型:color,date,email,month,time,search等等
  • 表单元素:datalist,keygen,output等等
  • 表单属性:placeholder,required,pattern等等

3. 视频和音频

HTML5提供了播放音频文件的标准,即使用

4. Canvas

提供画布用来通过脚本绘制图形,这块比较大,不在这里展开描述、

5. SVG

SVG是指可伸缩的矢量图形,是一种使用XML描述2D图形的语言。

6. 地理定位

HTML5 Geolocation(地理定位)用于定位用户的位置。

7. 拖放API

在HTML5中,提供了直接支持拖放操作的API。新的拖放API已经支持浏览器与其他应用程序之间的互相拖动。相比以前的使用mousedown、mouseover、mouseup实现的拖放,新的API大大简化了拖放的代码。

(1)首先把要拖放的对象的元素的draggable属性设为true(draggable=”true”)。另外对元素(指定href属性)默认允许拖放。

(2)拖放的过程分为源对象和目标对象。源对象是指你即将拖动元素,而目标对象则是指拖动之后要放置的目标位置。

源对象可以触发的事件:
dragstart:拖动开始
drag:拖动中
dragend:拖动结束

整个拖动过程的组成: dragstart-1 + drag-n + dragend-1

目标对象可以触发的事件:
dragenter:拖动着进入
dragover:拖动着悬停
dragleave:拖动着离开
drop:释放

整个拖动过程的组成1: dragenter-1 + dragover-n + dragleave-1
整个拖动过程的组成2: dragenter-1 + dragover-n + drop-1

dataTransfer:用于数据传递的对象:
在拖动源对象事件中使用e.dataTransfer属性保存数据:
e.dataTransfer.setData( k, v )

在拖动目标对象事件中使用e.dataTransfer属性读取数据:
var value = e.dataTransfer.getData( k )

这里举一个比较全面的例子:

<!DOCTYPE html>
<html>

<head>
    <title>Title</title>
    <meta charset="utf-8">
    <style>
        #draggable {
            width: 200px;
            height: 20px;
            text-align: center;
            background: white;
            margin: 0 auto;
        }

        .dropzone {
            box-sizing: border-box;
            width: 400px;
            height: 60px;
            background: blueviolet;
            margin: 10px auto;
            padding: 20px;
        }
    </style>
</head>

<body>
    <!--dropzone:表示可释放的区域-->
    <div class="dropzone">
        <!--可拖动的元素 draggable="true"-->
        <div id="draggable" draggable="true">
            来拖动我呀
        </div>
    </div>
    <div class="dropzone"></div>


    <script>
        /*储存拖动的目标*/
        var dragged;

        /*开始拖动的时触发,只触发一次*/
        document.addEventListener("dragstart", function (event) {
            console.log("开始拖动了");
            // 保存被拖动的元素对象
            dragged = event.target;
            event.target.style.opacity = .3;
        }, false);

        /* 拖动的过程中触发,只要元素在拖动,会一直重复触发 */
        document.addEventListener("drag", function (event) {
            console.log("正在被拖动")
        }, false);

        /*进入另外一个元素的区域时触发*/
        document.addEventListener("dragenter", function (event) {
            // 判断当前的目标是否进入了dropzone区域
            if (event.target.className == "dropzone") {
                console.log("进入潜在的目标区域");
                event.target.style.background = "gold";
            }
        }, false);

        /* 在潜在目标区域的上方的时候会重复触发 */
        document.addEventListener("dragover", function (event) {
            console.log("在潜在的目前区域上方");
            //必须阻止默认行为,否则的后面的drop事件不会触发
            event.preventDefault();  
        }, false);

        /*松开鼠标拖放结束。*/
        document.addEventListener("dragend", function (event) {
            console.log("拖放结束");
            event.target.style.opacity = "1";
        }, false);

        /*从潜在目标元素上方离开的时候触发*/
        document.addEventListener("dragleave", function (event) {
            console.log("离开目标元素");
            // 因为进入一个元素的时候更改了目标元素的背景,所以离开的时候要重置背景
            if (event.target.className == "dropzone") {
                event.target.style.background = "";
            }
        }, false);

        /*释放拖动元素的时候触发,这个事件是在dropend事件触发前触发。*/
        document.addEventListener("drop", function (event) {
            console.log("元素被放下");
            event.preventDefault();
            if (event.target.className == "dropzone") {
                event.target.style.background = "";
                //把拖动元素从他原来的父节点中移除。
                dragged.parentNode.removeChild(dragged);
                //插入到目标元素中。
                event.target.appendChild(dragged);
            }
        }, false);
    </script>
</body>

</html>

8. Web Worker

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。 您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。

9. Web Stroage

localStroage和sessionStroage,具体内容见另一篇博客。

10. WebSocket

WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

单工:数据传输只允许在一个方向上的传输,只能一方来发送数据,另一方来接收数据并发送。例如:对讲机
半双工:数据传输允许两个方向上的传输,但是同一时间内,只可以有一方发送或接受消息。例如:打电话
全双工:同时可进行双向传输。例如:websocket

在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。

<body>
    <div>
        <a href="javascript:WebSocketTest()">运行 WebSocket</a>
    </div>
    <script>
        function WebSocketTest() {
            if ("WebSocket" in window) {
                alert("您的浏览器支持 WebSocket!");

                // 打开一个 web socket
                var ws = new WebSocket("ws://localhost:3000");

                ws.onopen = function () {
                    // Web Socket 已连接上,使用 send() 方法发送数据
                    ws.send("发送数据");
                    alert("数据发送中...");
                };

                ws.onmessage = function (evt) {
                    var received_msg = evt.data;
                    alert("数据已接收...");
                };

                ws.onclose = function () {
                    // 关闭 websocket
                    alert("连接已关闭...");
                };
            }

            else {
                // 浏览器不支持 WebSocket
                alert("您的浏览器不支持 WebSocket!");
            }
        }
    </script>
</body>