HTML5新特性:为Web带来的翻天覆地变化

cover

随着互联网的发展,HTML5作为Web开发的重要里程碑,为我们带来了一系列令人兴奋的新特性和功能。本文将带领大家探索HTML5的新特性,揭示其对Web技术的巨大影响。

一、介绍

HTML5作为HTML的最新版本,不仅强化了网页结构与内容,还引入了丰富的多媒体功能,以及改进的用户体验。这些新特性不仅为开发人员提供了更多的工具和选项,也为用户带来了更加流畅和丰富的网络体验。

主要新特性:

  1. 语义化标签:HTML5引入了一系列的语义化标签,如<header><footer><nav>等,使得网页结构更加清晰,利于搜索引擎优化(SEO)和无障碍访问。
  2. 多媒体支持:HTML5提供了内置的多媒体支持,包括<audio><video>标签,不再需要第三方插件如Flash,提升了网页性能和可访问性。
  3. Canvas绘图:借助<canvas>标签,开发者可以通过JavaScript绘制图形、动画等,为Web应用添加了更多的交互性和视觉效果。
  4. 本地存储:HTML5引入了Web Storage和IndexedDB等新的存储机制,使得网页可以在本地存储数据,提高了应用的性能和用户体验。

详细案例与代码解释:

1. 语义化标签
  • 案例代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Semantic HTML5</title>
</head>
<body>
  <header>
    <h1>Website Header</h1>
  </header>
  
  <nav>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>

  <section>
    <h2>Main Content Section</h2>
    <p>This is the main content of the website.</p>
  </section>

  <footer>
    <p>&copy; 2024 My Website</p>
  </footer>
</body>
</html>
  • 参数解释
    • <header>: 定义文档或文档部分的页眉。
    • <nav>: 定义导航链接的部分。
    • <section>: 定义文档中的节,比如章节、页眉、页脚或文档中的其他部分。
    • <footer>: 定义文档或文档部分的页脚。
      效果如下:
      result
2. 多媒体支持
  • 案例代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>HTML5 Media</title>
</head>
<body>
  <video controls width="400">
    <source src="movie.mp4" type="video/mp4">
    Your browser does not support the video tag.
  </video>

  <audio controls>
    <source src="music.mp3" type="audio/mpeg">
    Your browser does not support the audio tag.
  </audio>
</body>
</html>
  • 参数解释

    • <video>: 用于嵌入视频文件。
      • controls: 显示视频控制条。
      • width: 视频播放器的宽度。
    • <audio>: 用于嵌入音频文件。
      • controls: 显示音频控制条。

    结果如下:
    result

3. Canvas绘图
  • 案例代码

以逐渐浮现某元素效果为例:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Canvas Drawing</title>
</head>

<body>
  <!-- 定义一个宽度为200像素,高度为100像素的画布 -->
  <canvas id="myCanvas"></canvas> <!-- canvas不能用css设置属性,只能用js -->

  <script>
    // 获取画布元素
    var canvas = document.getElementById('myCanvas');
    canvas.width = 200;
    canvas.height = 100;

    // 获取画布的二维渲染上下文
    var ctx = canvas.getContext('2d');

    // 定义颜色的透明度
    var alpha = 0;

    // 使用 requestAnimationFrame 逐帧更新画布内容
    function draw() {
      // 设置填充颜色为绿色,并设置透明度
      ctx.fillStyle = 'rgba(0, 128, 0, ' + alpha + ')';

      // 绘制一个矩形,其左上角坐标为(10,10),宽度为150像素,高度为80像素
      ctx.fillRect(10, 10, 150, 80);

      // 每帧增加透明度
      alpha += 0.001;

      // 当透明度大于等于1时,停止更新
      if (alpha < 1) {
        requestAnimationFrame(draw);
      }
    }

    // 两秒后执行
    setTimeout(function () {
      requestAnimationFrame(draw);
    }, 2000);
  </script>
</body>

</html>

requestAnimationFrame 是一个用于在浏览器中执行动画的 API。它允许您告诉浏览器您希望执行动画,并请求浏览器在下一次重绘之前调用指定的回调函数更新动画。这个函数被设计成在下一次重绘之前只更新一次动画,以提高性能和效率。
使用 requestAnimationFrame 可以帮助您创建平滑的动画,因为它会自动优化动画的帧率,以适应浏览器的性能和显示器的刷新率。例如,如果浏览器正在处理其他任务或者显示器的刷新率很低,那么 requestAnimationFrame 可能会减慢动画的帧率,以避免浪费资源。
requestAnimationFrame 的回调函数接收一个参数,即表示当前帧的时间戳(以毫秒为单位)的数值。这个时间戳可以用来计算动画的时间,以实现更精确的动画控制。
这个示例中,使用 requestAnimationFrame() 方法来逐帧更新画布内容,每帧都增加颜色的透明度,从而实现颜色慢慢浮现的效果;

  • 参数解释
  • <canvas>: 用于绘制图形的区域。
    • width: 画布的宽度。
    • height: 画布的高度。
  • getContext('2d'): 获取一个用于在画布上绘图的二维渲染上下文。
  • fillStyle: 设置用于填充绘制的形状的颜色、渐变或模式。
  • fillRect(x, y, width, height): 在画布上绘制一个矩形,其左上角坐标为 (x, y),宽度为 width,高度为 height。
  • requestAnimationFrame(callback): 请求浏览器在下一次重绘之前调用指定的回调函数更新动画。
  • rgba(red, green, blue, alpha): 以红、绿、蓝和 alpha 通道的值来指定颜色。alpha 通道的值范围为 0 到 1,用于指定颜色的不透明度。
  • setTimeout(callback, delay): 在指定的延迟(以毫秒计)后调用指定的回调函数。

Canvas 标签元素本身是一个画布容器,它的大小可以通过 HTML 属性或者 CSS 样式进行设置。但是,Canvas 内部绘制的图形和元素是使用 JavaScript 来控制的,不能通过 CSS 来直接控制它们的显示效果。例如,你可以使用 CSS 来设置 Canvas 元素的背景色、边框、大小等属性,但是无法使用 CSS 来设置 Canvas 内部的矩形、线条、文本等元素的颜色、大小、位置等属性。这些属性需要通过 JavaScript 中的 Canvas API 来控制。

效果如下:
canvas

4. 本地存储LocalStorage
  • 案例代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Web Storage</title>
</head>

<body>
  <h1>LocalStorage 示例</h1>
  <input type="text" id="input" placeholder="输入文本">
  <button onclick="saveData()">保存数据</button>
  <button onclick="loadData()">加载数据</button>
  <p id="output"></p>
  <script>
    // 保存数据到本地存储
    function saveData() {
      var input = document.getElementById('input').value; // 获取输入框中的值
      localStorage.setItem('userData', input); // 将值保存到本地存储中,键为'userData'
    }

    // 从本地存储中加载数据
    function loadData() {
      var output = document.getElementById('output'); // 获取输出元素
      var data = localStorage.getItem('userData'); // 从本地存储中获取键为'userData'的值
      if (data) { // 如果值不为空
        output.textContent = '加载的数据: ' + data; // 将值显示在输出元素中
      } else {
        output.textContent = '没有找到数据。'; // 否则显示提示信息
      }
    }

  </script>
</body>

</html>

参数解释:

  • localStorage: 用于在浏览器中存储键值对数据,数据在页面会话结束后仍然存在。
  • setItem(key, value): 将指定的值与指定的键相关联。
  • getItem(key): 获取与指定键相关联的值。如果键不存在,则返回 null

效果如下:
本地存储

5. 会话存储Session Storage

特性描述

sessionStorage提供了一种方式来临时存储数据,对于需要临时保存如表单数据、用户界面状态等信息的场景非常有用。每个会话都有自己的存储空间,并且这些数据只对当前会话的窗口可见。

案例代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>会话存储案例</title>
</head>
<body>
    <input type="text" id="sessionInput">
    <button onclick="saveSessionData()">保存到会话存储</button>
    <button onclick="showSessionData()">展示存储的结果</button>

    <script>
        function saveSessionData() {
            var data = document.getElementById('sessionInput').value;
            sessionStorage.setItem('sessionData', data);
        }

        function showSessionData() {
            alert(sessionStorage.getItem('sessionData'));
        }
    </script>
</body>
</html>
参数解释
  • sessionStorage: 用于临时存储在浏览器会话中的键值对数据。
  • setItem(key, value): 将数据以键值对形式保存在sessionStorage中。
  • getItem(key): 从sessionStorage中检索与指定键相关联的值。

通过使用sessionStorage,开发者可以在用户浏览网页时临时存储必要的数据,而不必担心页面刷新或关闭后数据丢失的问题。这为创建具有更好用户体验的动态网页应用提供了更多的可能性。

效果如下:
会话存储

6.地理定位Geolocation API

原理

Geolocation API允许Web应用访问用户的地理位置信息。用户必须授权网站访问这些信息,保证了用户隐私的安全。一旦授权,Web应用就可以获取用户的纬度和经度信息,从而提供定位服务,如天气更新、附近的餐馆等。

案例代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>地理定位案例</title>
</head>
<body>
    <!-- 点击按钮获取当前坐标 -->
    <button onclick="getLocation()">获取当前坐标</button>
    <!-- 显示坐标信息的元素 -->
    <p id="location"></p>

    <script>
        // 获取当前坐标
        function getLocation() {
            // 检查浏览器是否支持地理定位
            if (navigator.geolocation) {
                // 获取当前位置坐标
                navigator.geolocation.getCurrentPosition(showPosition, showError);
            } else {
                // 浏览器不支持地理定位
                document.getElementById("location").innerHTML = "该浏览器不支持地理定位。";
            }
        }

        // 显示坐标信息
        function showPosition(position) {
            // 获取纬度和经度
            var latlon = "纬度: " + position.coords.latitude +
            "<br>经度: " + position.coords.longitude;
            // 显示坐标信息
            document.getElementById("location").innerHTML = latlon;
        }

        // 显示错误信息
        function showError(error) {
            switch(error.code) {
                case error.PERMISSION_DENIED:
                    document.getElementById("location").innerHTML = "用户拒绝了获取地理定位的请求。"
                    break;
                case error.POSITION_UNAVAILABLE:
                    document.getElementById("location").innerHTML = "位置信息不可用。"
                    break;
                case error.TIMEOUT:
                    document.getElementById("location").innerHTML = "获取用户位置超时。"
                    break;
                case error.UNKNOWN_ERROR:
                    document.getElementById("location").innerHTML = "发生了未知错误。"
                    break;
            }
        }
    </script>
</body>
</html>
参数解释
  • navigator.geolocation: Web浏览器的Geolocation对象,用于访问用户的地理位置。

  • getCurrentPosition(success, error, options): 获取用户当前位置。接受三个参数:成功回调函数、错误回调函数和可选的选项对象。

    • success: 成功回调函数,接收一个position对象作为参数。
    • error: 错误回调函数,接收一个error对象作为参数。
    • options: 可选参数,如最大年龄、超时时间和是否需要高精度位置。

    实现效果如下:
    地理定位

7.元素拖动放置Drag and Drop API

原理

Drag and Drop API使得HTML元素可拖动。通过监听拖动事件,Web应用可以定义元素被拖动时的行为以及放下(drop)时的动作,使得用户界面更为直观和交互性强。

案例代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>拖拽放置示例</title>
    <style>
        #div1,
        #div2 {
            width: 350px;
            height: 70px;
            padding: 10px;
            border: 1px solid #9c2c2c;
        }
    </style>
</head>

<body>
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <img id="drag1"
        src="../assit/logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69">
    <script> // 禁止默认拖拽行为,允许dropping 
        function allowDrop(ev) {
            ev.preventDefault();
        } // 在开始拖拽时,保存被拖拽元素的 id 到数据传输对象 dataTransfer 中 
        function drag(ev) {
            ev.dataTransfer.setData("text", ev.target.id);
        } // 在放置被拖拽元素时,prevent default 阻止默认行为,并将被拖拽元素追加到目标容器中 
        function drop(ev) {
            ev.preventDefault();
            var data = ev.dataTransfer.getData("text"); // 获取被拖拽元素的 id 
            ev.target.appendChild(document.getElementById(data)); // 将被拖拽元素追加到目标容器中 
        } 
    </script>
</body>

</html>
注释说明:
  • allowDrop(ev) 函数用于在拖拽元素移动到可放置容器上方时触发,通过调用 ev.preventDefault() 禁止默认的拖拽行为,并允许放置操作。
  • drag(ev) 函数用于在拖拽操作开始时触发,通过调用 ev.dataTransfer.setData(“text”, ev.target.id) 保存被拖拽元素的 id 到数据传输对象 dataTransfer 中。
  • drop(ev) 函数用于在拖拽元素放置到可放置容器上时触发,通过调用 ev.preventDefault() 禁止默认的拖拽行为,并通过获取数据传输对象中保存的被拖拽元素 id,将其追加到目标容器中。
参数解释:
  • ev 为触发事件对象,包含了与事件相关的信息和方法。
  • dataTransfer 为数据传输对象,用于在拖拽操作中保存和传递数据。
  • setData(“text”, ev.target.id) 用于向数据传输对象中保存被拖拽元素的 id。
  • getData(“text”) 用于从数据传输对象中获取被拖拽元素的 id。
  • appendChild() 用于将被拖拽元素追加到目标容器中。

效果如下:
拖拽放置

8.Web Sockets

原理

Web Sockets提供了一种在用户和服务器之间建立持久连接的方法。与传统的HTTP连接不同,WebSocket提供了全双工通信机制,即客户端和服务器可以在任何时刻发送数据,适用于需要实时数据交换的应用,如在线游戏、聊天应用等。

案例代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Demo</title>
</head>
<body>
    <h1>WebSocket Demo</h1>
    <div id="messages"></div>
    <input type="text" id="messageInput" placeholder="Type a message...">
    <button id="sendButton">Send</button>

    <script>
        var socket = new WebSocket("wss://echo.websocket.org");
        var messagesDiv = document.getElementById("messages");

        socket.onopen = function(event) {
            console.log("Connection opened");
        };

        socket.onmessage = function(event) {
            var message = document.createElement("p");
            message.textContent = "Received: " + event.data;
            messagesDiv.appendChild(message);
        };

        socket.onclose = function(event) {
            console.log("Connection closed");
        };

        document.getElementById("sendButton").addEventListener("click", function() {
            var input = document.getElementById("messageInput");
            var message = input.value;
            if (message.trim() !== "") {
                socket.send(message);
                var sentMessage = document.createElement("p");
                sentMessage.textContent = "Sent: " + message;
                messagesDiv.appendChild(sentMessage);
                input.value = "";
            }
        });
    </script>
</body>
</html>

参数解释
  • WebSocket: 构造函数,用于创建WebSocket连接。接受一个表示服务器地址的URL作为参数。
  • onopen: 连接成功建立时触发的事件处理程序。
  • onmessage: 接收到消息时触发的事件处理程序。
  • onclose: 连接关闭时触发的事件处理程序。
  • send(message): 方法,用于向服务器发送信息。
    效果如下:
    websocket

9.Web Workers

原理

Web Workers 的主要作用是允许 web 应用程序在主线程之外运行脚本操作,使得主线程(通常负责 UI 渲染、用户交互等)不会被阻塞,从而提供更流畅的用户体验。

下面是一个完整的 HTML 代码示例,包含了使用 Web Workers 的案例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Web Workers Example</title>
</head>

<body>
    <h1>Web Workers 案例</h1>
    <p id="result"></p>

    <script>
        if (window.Worker) {
            const myWorker = new Worker("../js/worker.js");

            myWorker.onmessage = function (e) {
                console.log('Message received from worker:', e.data);
                document.getElementById('result').textContent += e.data;
            };


            myWorker.postMessage("Hello, worker!");
        } else {
            console.log('Web Workers are not supported in this browser.');
        }
    </script>
</body>

</html>

在这个示例中,我们在 HTML 文档中添加了一个 p 元素,用于显示从 Web Worker 接收到的数据。在主脚本中,我们使用 document.getElementById 方法获取 p 元素,并将接收到的数据显示在页面上。

// worker.js
self.onmessage = function(event) {
    // 接收主线程发送过来的消息
    var data = event.data;
    console.log('Received message from main thread:', data);

    // 逐字输出中文名言
    var quote = "学而时习之,不亦说乎...";
    for (let i = 0; i < quote.length; i++) {
        setTimeout(() => {
            self.postMessage(quote[i]);
        }, 500 * i);
    }
};


请注意,worker.js 文件应该与 HTML 文件位于同一个目录下。
效果如下:
webworkers

以上就是对HTML5中新特性的详细介绍,包括它们的工作原理、使用案例,以及相关参数的解释。这些新特性大大扩展了Web开发的能力,使得创建富有表现力和高度互动的Web应用成为可能。

总结

HTML5的新特性为Web开发者提供了更多的选择和灵活性,使得开发更加高效和便捷。通过合理利用这些特性,我们可以为用户提供更加丰富、流畅的网络体验。

文章参考

  • W3C官方文档
  • MDN Web文档

项目地址

Github地址
拓展阅读


如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/422510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】JVM相关机制

1. JVM内存区域划分 1.1 内存区域划分简介 内存区域划分&#xff1a;实际上JVM也是一个进程&#xff0c;进程运行时需要向操作系统申请一些系统资源&#xff08;内存就是典型的资源&#xff09;&#xff0c;这些内存空间就支撑着后续Java程序的运行&#xff0c;而这些内存又会…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用&#xff0c;首先介绍如何安装swagger&#xff0c;测试是否成功&#xff1b;然后列出常用的注释和给出使用例子&#xff1b;最后生成接口文档&#xff0c;并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

T3SF:一款功能全面的桌面端技术练习模拟框架

关于T3SF T3SF是一款功能全面的桌面端技术练习模拟框架&#xff0c;该工具针对基于主场景事件列表的各种事件提供了模块化的架构&#xff0c;并包含了针对每一个练习定义的规则集&#xff0c;以及允许为对应平台参数定义参数的配置文件。 该工具的主模块能够执行与其他特定模…

Python学习 问题汇总(None)

None的总结 在Python中&#xff0c;对于一些变量往往需要赋初始值&#xff0c;为了防止初始值与正常值混淆&#xff0c;通常采用置0或置空操作&#xff0c;置0比较简单&#xff0c;置空则是赋NoneNone是一个空值&#xff0c;可以赋给任意类型的变量&#xff0c;起到占位的作用…

德人合科技 | —数据泄露可能会对公司造成哪些影响?

数据泄露可能会对公司造成多方面的影响&#xff0c;以下是一些可能的影响&#xff1a; 财务损失&#xff1a;数据泄露可能导致公司遭受财务损失。攻击者可能会盗取公司的敏感信息&#xff0c;如客户信息、银行账户信息、商业机密等&#xff0c;并利用这些信息进行欺诈、盗窃等非…

从键盘输入5个整数,将这些整数插入到一个链表中,并按从小到大次序排列,最后输出这些整数。

设节点定义如下struct Node {int Element; // 节点中的元素为整数类型struct Node * Next; // 指向下一个节点 }; 从键盘输入5个整数&#xff0c;将这些整数插入到一个链表中&#xff0c;并按从小到大次序排列&#xff0c;最后输出这些整数。注释那段求指出错误&#xff0c;求解…

微信自动回复,基于python

#!/usr/bin/python3 # -*- coding: utf-8 -*-import numpy as np import pandas as pd from uiautomation import WindowControl import csvwx WindowControl(Name微信,searchDepth1 ) # 切换窗口 wx.ListControl() wx.SwitchToThisWindow() # 寻找会话控件绑定 hw wx.…

【竞技宝jjb.lol】LOL:圣枪剑魔屡建奇功 JDG2-0轻松击败TT

北京时间2024年3月2日&#xff0c;英雄联盟LPL2024春季常规赛继续进行&#xff0c;昨日共进行三场比赛&#xff0c;第三场比赛由JDG对阵TT。本场比赛TT前期和JDG有来有回&#xff0c;但中期团战处理还是稍欠火候&#xff0c;最终JDG2-0轻松击败TT。以下是本场比赛的详细战报。 …

Shellcode ---> 脚本命令入门

今天来浅讲一下shellcode&#xff0c;开始之前&#xff0c;先来乐一乐&#xff0c;哈哈哈哈哈哈哈哈哈哈哈哈 以下的命令你们都别乱用 &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01…

九、JavaAgent核心——Instrumentation

九、JavaAgent核心——Instrumentation 动态 Instrumentation 是 Java SE 5 的新特性&#xff0c;它在 java.lang.instrument 包中&#xff0c;它把 Java 的 instrument 功能从本地代码中释放出来&#xff0c;使其可以用 Java 代码的方式解决问题。使用 Instrumentation&#…

docker报错 fatal error: runtim: out of memory

fatal error: runtim: out of memory 真无语了 系统内存也够用 原来是虚拟机的不够用了 &#xff08;原本1g已经加到2g还是会报错&#xff09; 直接3台虚拟机都加到4g

物联网与智慧城市:融合创新,塑造未来城市生活新图景

一、引言 在科技飞速发展的今天&#xff0c;物联网与智慧城市的融合创新已成为推动城市发展的重要力量。物联网技术通过连接万物&#xff0c;实现信息的智能感知、传输和处理&#xff0c;为智慧城市的构建提供了无限可能。智慧城市则运用物联网等先进技术&#xff0c;实现城市…

Flink基本原理 + WebUI说明 + 常见问题分析

Flink 概述 Flink 是一个用于进行大规模数据处理的开源框架&#xff0c;它提供了一个流式的数据处理 API&#xff0c;支持多种编程语言和运行时环境。Flink 的核心优点包括&#xff1a; 低延迟&#xff1a;Flink 可以在毫秒级的时间内处理数据&#xff0c;提供了低延迟的数据…

7款炫酷的前端动画特效分享(二)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 jQuery拉开帷幕特效 基于jQuery实现的帷幕特效 点击右侧拉条 可以实现帷幕的收起也展开 非常的炫酷…

协议和序列化反序列化

“协议”和序列化反序列化 “协议”的概念&#xff1a; “协议”本身是一种约定俗成的东西&#xff0c;由通讯双方必须共同遵从的一组约定&#xff0c;因此我们一定要将这种约定用计算机语言表达出来&#xff0c;此时双方计算机才能识别约定的相关内容 我们把这个规矩叫做“…

【论文阅读】基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪

Bubble recognizing and tracking in a plate heat exchanger by using image processing and convolutional neural network 基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪 期刊信息&#xff1a;International Journal of Multiphase Flow 2021 期刊级别&#xff1a;…

02-Vue 计算属性与监听器与VUE-cli使用

1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

C++从入门到实践要掌握的20个的代码案例及入门技巧

文章目录 C从入门到实践要掌握的20个的代码案例C从入门到实践&#xff0c;开发者需要掌握的基础知识和技能可以分为以下几个阶段&#xff1a;初级阶段&#xff1a;中级阶段&#xff1a;高级阶段&#xff1a; C快速入门技巧&#xff1a; C从入门到实践要掌握的20个的代码案例 C…

vSphere资源管理

一 内存、CPU、资源池和vApp 内存部分&#xff1a; 关联VM内存 我们可以超额的关联内存给VM。例如&#xff1a;ESXI物理主机内存只有8G&#xff0c;但我们可以给三个VM都分配4G内存。 2.ESXI四大高级内存控制技术 a.Page sharing&#xff08;透明的页面共享&#xff09; 虚…

鸿蒙Harmony应用开发—ArkTS声明式开发(自定义事件分发)

ArkUI在处理触屏事件时&#xff0c;会在触屏事件触发前进行按压点和组件区域的触摸测试&#xff0c;来收集需要响应触屏事件的组件&#xff0c;再基于触摸测试结果分发相应的触屏事件。在父节点&#xff0c;开发者可以通过onChildTouchTest决定如何让子节点去做触摸测试&#x…