4个自定义倒计时


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><title>4个自定义倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}header {width: 100vw;height: 40px;display: flex;justify-content: space-between;align-items: center;background-color: #cbcbcb;/* logo */figure.logo {width: 262px;height: 50px;/* 缩小 */transform: scale(0.8);margin-top: 2px;margin-left: -15px;border-radius: 50%;background: #f30303;box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6),inset -4px -4px 5px rgba(0, 0, 0, 0.6);z-index: 99;figcaption {background: hsl(0, 0%, 0%);background-clip: text;-webkit-background-clip: text;-webkit-text-fill-color: transparent;font-weight: bold;box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6), inset -4px -4px 5px rgba(0, 0, 0, 0.6);letter-spacing: -3px;line-height: 45px;border-radius: 50%;font-size: 40px;width: 152px;}.my_name1 {text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.726);clip-path: polygon(0% 0%, 100% 0%, 100% 50%, 0% 50%);transform: translate(35%, 0%);}.my_name2 {text-shadow: 1px 1px 1px hsla(160, 100%, 37%, 0.555);clip-path: polygon(0% 50%, 100% 50%, 100% 100%, 0% 100%);transform: translate(35%, -93%);}img {width: 60px;height: 35px;border-radius: 50%;transition: transform 0.3s ease;position: absolute;&:hover {transform: scale(1.3);filter: drop-shadow(0 0 0.3em #ff0202);}}.kong {margin-top: 7px;margin-left: 200px;}.ying {top: 7px;margin-left: 2px;}}/* 时间 */time {background: -webkit-linear-gradient(315deg, #e1ff00 50%, #ff0000);background-clip: text;-webkit-background-clip: text;-webkit-text-fill-color: transparent;font-size: 1.5rem;font-weight: 900;text-shadow: 2px -1px 8px rgba(250, 80, 193, 0.323);sub {-webkit-text-fill-color: #cfd601;text-shadow: 1px 1px 1px #100000;font-size: 1rem;}}/* 全屏还原关闭按钮 */menu {display: flex;button {background: none;border: none;}img {width: 35px;margin-top: 5px;margin-right: 5px;cursor: pointer;&:hover {transform: scale(1.2);padding: 5px;background: #ffd000;}}button:nth-child(2) {display: none;/* 放大镜效果 */transform: scale(1.16);}}}main {display: flex;flex-direction: column;align-items: center;button {font-size: 1.5rem;color: #d6d301;text-shadow: 1px 1px 1px #100000;font-weight: bold;cursor: pointer; border-radius: 3px;background-color: #f30303;border: none;margin: 5px;padding: 3px;}dialog {transform: translate(180%, 80%);z-index: 999;}div {margin-top: 20px;color: #67c23a;text-shadow: 1px 1px 1px #100000;}}</style>
</head><body><header><!-- logo --><figure class="logo"><a href="https://blog.csdn.net/lulei5153?spm=1011.2415.3001.5343" title="与妖为邻CSDN博客" target="_blank"><img class="kong" src="file:///D:/img/icon.ico" alt="与妖为邻"></a><figcaption class="my_name1">与妖为邻</figcaption><figcaption class="my_name2">与妖为邻</figcaption><a href="file:///D:/web/html%E9%A6%96%E9%A1%B5/%E5%A4%87%E5%BF%98%E5%BD%95.html" class="home_page"title="首页" target="_blank"><img class="ying" src="file:///D:/img/ying.png" alt="与妖为邻"></a></figure><!-- 时间 --><time datetime="2024-07-10" title="2024-07-10" id="dateTime">2024-07-10</time><!-- 天气 --><iframe class="tianqi" frameborder="0" width="280" height="36" scrolling="no" hspace="0"src="https://i.tianqi.com/?c=code&id=99"></iframe><!-- 全屏还原关闭按钮 --><menu><button class="fullScreen" type="button"><img src="file:///D:/img/全屏.svg" alt="全屏"onclick="fullScreen()"></button><button class="exitFullScreen" type="button"><img src="file:///D:/img/还原.svg" alt="还原"onclick="exitFullScreen()"></button><button type="button"><img src="file:///D:/img/关闭.svg" alt="关闭" onclick="closeAll()"> </button></menu></header><main><!-- 第一个倒计时 --><button onclick="dialogCountdownElement1.showModal()" id="countdownElement1">第一个倒计时</button><dialog id="dialogCountdownElement1"><form method="dialog"><div><label for="message1">更改提示信息:</label><input type="text" id="message1" value="距离2024年国庆节还有:"></div><div><label for="targetDate1">更改目标日期:</label><input type="datetime-local" id="targetDate1"></div><button type="submit" style="display: block; margin: 5px auto;">关闭</button></form></dialog><!-- 第二个倒计时 --><button onclick="dialogCountdownElement2.showModal()" id="countdownElement2">第二个倒计时</button><dialog id="dialogCountdownElement2"><form method="dialog"><div><label for="message2">更改提示信息:</label><input type="text" id="message2" value="距离2024年国庆节还有:"></div><div><label for="targetDate2">更改目标日期:</label><input type="datetime-local" id="targetDate2"></div><button type="submit" style="display: block; margin: 5px auto;">关闭</button></form></dialog><!-- 第三个倒计时 --><button onclick="dialogCountdownElement3.showModal()" id="countdownElement3">第三个倒计时</button><dialog id="dialogCountdownElement3"><form method="dialog"><div><label for="message3">更改提示信息:</label><input type="text" id="message3" value="距离2024年国庆节还有:"></div><div><label for="targetDate3">更改目标日期:</label><input type="datetime-local" id="targetDate3"></div><button type="submit" style="display: block; margin: 5px auto;">关闭</button></form></dialog><!-- 第四个倒计时 --><button onclick="dialogCountdownElement4.showModal()" id="countdownElement4">第四个倒计时</button><dialog id="dialogCountdownElement4"><form method="dialog"><div><label for="message4">更改提示信息:</label><input type="text" id="message4" value="距离2024年国庆节还有:"></div><div><label for="targetDate4">更改目标日期:</label><input type="datetime-local" id="targetDate4"></div><button type="submit" style="display: block; margin: 5px auto;">关闭</button></form></dialog><div><h2>2025主要节日时间表</h2><ul><li>元旦:2025年1月1日</li><li>春节:2025年2月12日</li><li>清明节:2025年4月4日</li><li>劳动节:2025年5月1日</li><li>端午节:2025年6月2日</li><li>中秋节:2025年9月21日</li><li>国庆节:2025年10月1日</li></ul></div></main><script>/* 现在时间*/var current_time = document.getElementById("dateTime");function showTime() {var now = new Date();var year = now.getFullYear();var month = ("0" + (now.getMonth() + 1)).slice(-2);var day = ("0" + now.getDate()).slice(-2);var hour = ("0" + now.getHours()).slice(-2);var min = ("0" + now.getMinutes()).slice(-2);var second = ("0" + now.getSeconds()).slice(-2);var week = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六",][now.getDay()];var time = `${year}-${month}-${day}<sub id='sub'>${week}</sub> ${hour}:${min}:${second}`;current_time.innerHTML = time;}showTime();setInterval(showTime, 1000);/* 现在时间 结束*//* 全屏功能与关闭*/function fullScreen() {var elem = document.documentElement;if (elem.requestFullscreen) {elem.requestFullscreen();} else if (elem.mozRequestFullScreen) { // Firefoxelem.mozRequestFullScreen();} else if (elem.webkitRequestFullscreen) { // Chrome, Safari and Operaelem.webkitRequestFullscreen();} else if (elem.msRequestFullscreen) { // IE/Edgeelem.msRequestFullscreen();}}function exitFullScreen() {if (document.exitFullscreen) {document.exitFullscreen();} else if (document.mozCancelFullScreen) { // Firefoxdocument.mozCancelFullScreen();} else if (document.webkitExitFullscreen) { // Chrome, Safari and Operadocument.webkitExitFullscreen();} else if (document.msExitFullscreen) { // IE/Edgedocument.msExitFullscreen();}}// 获取全屏和还原按钮var fullScreenBtn = document.querySelector(".fullScreen");var exitFullScreenBtn = document.querySelector(".exitFullScreen");// 监听全屏和还原事件document.addEventListener("fullscreenchange", function () {if (document.fullscreenElement) {fullScreenBtn.style.display = "none";exitFullScreenBtn.style.display = "block";} else {fullScreenBtn.style.display = "block";exitFullScreenBtn.style.display = "none";}});// 关闭当前窗口function closeAll() {window.close();}/* 全屏功能与关闭 结束*//* 倒计时功能实现*/// 加载时从localStorage读取数据window.onload = function () {var message1 = localStorage.getItem('message1');var targetDate1 = localStorage.getItem('targetDate1');var message2 = localStorage.getItem('message2');var targetDate2 = localStorage.getItem('targetDate2');var message3 = localStorage.getItem('message3');var targetDate3 = localStorage.getItem('targetDate3');var message4 = localStorage.getItem('message4');var targetDate4 = localStorage.getItem('targetDate4');if (message1) {document.getElementById('message1').value = message1;}if (targetDate1) {document.getElementById('targetDate1').value = targetDate1;}if (message2) {document.getElementById('message2').value = message2;}if (targetDate2) {document.getElementById('targetDate2').value = targetDate2;}if (message3) {document.getElementById('message3').value = message3;}if (targetDate3) {document.getElementById('targetDate3').value = targetDate3;}if (message4) {document.getElementById('message4').value = message4;}if (targetDate4) {document.getElementById('targetDate4').value = targetDate4;}};// 保存数据到localStoragefunction saveData1() {var message1 = document.getElementById('message1').value;var targetDate1 = document.getElementById('targetDate1').value;localStorage.setItem('message1', message1);localStorage.setItem('targetDate1', targetDate1);}function saveData2() {var message2 = document.getElementById('message2').value;var targetDate2 = document.getElementById('targetDate2').value;localStorage.setItem('message2', message2);localStorage.setItem('targetDate2', targetDate2);}function saveData3() {var message3 = document.getElementById('message3').value;var targetDate3 = document.getElementById('targetDate3').value;localStorage.setItem('message3', message3);localStorage.setItem('targetDate3', targetDate3);}function saveData4() {var message4 = document.getElementById('message4').value;var targetDate4 = document.getElementById('targetDate4').value;localStorage.setItem('message4', message4);localStorage.setItem('targetDate4', targetDate4);}// 监听输入框的变化并保存数据document.getElementById('message1').addEventListener('input', saveData1);document.getElementById('targetDate1').addEventListener('input', saveData1);document.getElementById('message2').addEventListener('input', saveData2);document.getElementById('targetDate2').addEventListener('input', saveData2);document.getElementById('message3').addEventListener('input', saveData3);document.getElementById('targetDate3').addEventListener('input', saveData3);document.getElementById('message4').addEventListener('input', saveData4);document.getElementById('targetDate4').addEventListener('input', saveData4);function showCountdown1() {var message1 = document.getElementById('message1').value;var targetDateInput1 = document.getElementById('targetDate1');var targetDateValue1 = targetDateInput1.value;var now = new Date();var targetDate1;if (targetDateValue1) {targetDate1 = new Date(targetDateValue1);} else {targetDate1 = new Date(2024, 9, 1); // 默认值:2024年10月1日}var diff1 = targetDate1 - now;var days1 = Math.floor(diff1 / (1000 * 60 * 60 * 24));var hours1 = Math.floor((diff1 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));var minutes1 = Math.floor((diff1 % (1000 * 60 * 60)) / (1000 * 60));var seconds1 = Math.floor((diff1 % (1000 * 60)) / 1000);var countdownElement1 = document.getElementById('countdownElement1');countdownElement1.innerHTML = `${message1}${days1}天${hours1}小时${minutes1}分${seconds1}秒`;}function showCountdown2() {var message2 = document.getElementById('message2').value;var targetDateInput2 = document.getElementById('targetDate2');var targetDateValue2 = targetDateInput2.value;var now = new Date();var targetDate2;if (targetDateValue2) {targetDate2 = new Date(targetDateValue2);} else {targetDate2 = new Date(2024, 9, 1); // 默认值:2024年10月1日}var diff2 = targetDate2 - now;var days2 = Math.floor(diff2 / (1000 * 60 * 60 * 24));var hours2 = Math.floor((diff2 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));var minutes2 = Math.floor((diff2 % (1000 * 60 * 60)) / (1000 * 60));var seconds2 = Math.floor((diff2 % (1000 * 60)) / 1000);var countdownElement2 = document.getElementById('countdownElement2');countdownElement2.innerHTML = `${message2}${days2}天${hours2}小时${minutes2}分${seconds2}秒`;}function showCountdown3() {var message3 = document.getElementById('message3').value;var targetDateInput3 = document.getElementById('targetDate3');var targetDateValue3 = targetDateInput3.value;var now = new Date();var targetDate3;if (targetDateValue3) {targetDate3 = new Date(targetDateValue3);} else {targetDate3 = new Date(2024, 9, 1); // 默认值:2024年10月1日}var diff3 = targetDate3 - now;var days3 = Math.floor(diff3 / (1000 * 60 * 60 * 24));var hours3 = Math.floor((diff3 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));var minutes3 = Math.floor((diff3 % (1000 * 60 * 60)) / (1000 * 60));var seconds3 = Math.floor((diff3 % (1000 * 60)) / 1000);var countdownElement3 = document.getElementById('countdownElement3');countdownElement3.innerHTML = `${message3}${days3}天${hours3}小时${minutes3}分${seconds3}秒`;}function showCountdown4() {var message4 = document.getElementById('message4').value;var targetDateInput4 = document.getElementById('targetDate4');var targetDateValue4 = targetDateInput4.value;var now = new Date();var targetDate4;if (targetDateValue4) {targetDate4 = new Date(targetDateValue4);} else {targetDate4 = new Date(2024, 9, 1); // 默认值:2024年10月1日}var diff4 = targetDate4 - now;var days4 = Math.floor(diff4 / (1000 * 60 * 60 * 24));var hours4 = Math.floor((diff4 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));var minutes4 = Math.floor((diff4 % (1000 * 60 * 60)) / (1000 * 60));var seconds4 = Math.floor((diff4 % (1000 * 60)) / 1000);var countdownElement4 = document.getElementById('countdownElement4');countdownElement4.innerHTML = `${message4}${days4}天${hours4}小时${minutes4}分${seconds4}秒`;}showCountdown1();setInterval(showCountdown1, 1000);showCountdown2();setInterval(showCountdown2, 1000);showCountdown3();setInterval(showCountdown3, 1000);showCountdown4();setInterval(showCountdown4, 1000);/* 倒计时功能实现 结束*/</script>
</body></html>
相关文章:
4个自定义倒计时
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>4个自定义倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}hea…...
linux系统编程中Shell脚本配置,及linux脚本中的man test
Shell脚本配置是指在脚本中设置各种参数、选项和环境,以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。 1. 脚本开头的配置 Shebang 第一行通常是shebang,它告诉系统使用哪个解释器来执行脚本。例如…...
Win7虚拟机分享(已安装VMware Tools)
前言 之前写过VMware安装Win7并安装VMware tools的博客,但操作仍显繁琐。后来发现可以直接分享已经配置好的虚拟机,所有软件都是安装好的,解压即用。 一. VMware Win7虚拟机配置 已完成的配置和安装的软件 专业版Win7系统(已永久激活)VMware…...
CANOpen EMCY紧急报文介绍
什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时,向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时,就可以发送紧急报文。 紧急报文的格式 错误代码:是0x1003索引预定义错误字段的内容ÿ…...
JAVA项目
目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导,获取源码后台 一、前言 在数字化音乐时代,个性化推荐已成为提升用户体验、促进音乐消费的重要手段。为此࿰…...
️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)
引言:种下一棵树最好的时间是十年前,其次是现在 书接上回:将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的:在这个大模型横行的时候,我们常用电脑如何开展大模型的工作…...
Kafka实战(Scala操作)
Kafka基础讲解部分 Kafka基础讲解部分 Kafka实战(Scala操作) 1、引入依赖 版本: <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.report…...
Android Framework 之WMS详解
1.WMS说的就是 WindowManagerService:负责为Activity对应的窗口分配Surface,管理Surface的显示顺序以及位置尺寸,控制窗口动画 。 它是Android系统中为各个客户端即每个app来提供这样的服务的一个类。 在Android系统中在systemServer 进程和各…...
opencv-图像仿射变换
仿射变换设计图像位置角度的变化,是深度学习预处理中常用的功能。仿射变换就是对图像的平移缩放旋转翻转操作的组合 如下图,对图中点1,2,3与图二中三个点一一映射,仍然形成三角形,但形状已经发生改变,通过这两组三点求…...
算法的基本概念
一、算法的基本概念思维导图 二、什么是算法: 1.我们知道数据结构就是将我门现实的世界中的问题数据化,存入计算机中,并实现对数据结构的一些基本操作。 2.算法就是如何处理这些存入计算机中的信息,以求高效的解决实际问题。 3…...
124. Go Template应用实例:用代码生成代码
文章目录 生成器模式生成器代码生成 本文用生成器模式作为例子,来演示如何用代码生成代码。 生成器模式 熟悉 Java 开发的同学都知道,lombok 有一个著名的注解 Builder ,只要加在类上面,就可以自动生成 Builder 模式的代码。如下…...
【AI实践】阿里云方言文本转语音TTS
最近要做一些普通话和方言demo 找一个免费工具 免费在线文字转语音工具 | edge-tts 在线体验 (bingal.com) 还有一些方言在阿里云上找了下,基于官方demo改了一下 阿里云语音合成接口说明_智能语音交互(ISI)-阿里云帮助中心 (aliyun.com) 如何下载安装、使用语音…...
java 之 各类日期格式转换
一、前言 大家在开发过程中必不可少得和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转换! 从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时…...
Nvidia黄仁勋对话Meta扎克伯格:AI和下一代计算平台的未来 | SIGGRAPH 2024对谈回顾
在今年的SIGGRAPH图形大会上,Nvidia创始人兼CEO黄仁勋与Meta创始人马克扎克伯格进行了一场长达60分钟的对谈。这场对话不仅讨论了AI的未来发展和Meta的开源哲学,还发布了不少新产品,并深入探讨了下一代计算平台的可能性。 引言 人工智能的发…...
【JAVA设计模式】适配器模式——类适配器模式详解与案例分析
前言 在软件设计中,适配器模式(Adapter Pattern)是一种结构型设计模式,旨在使不兼容的接口能够协同工作。它通过引入一个适配器类,帮助两个接口之间进行适配,使得它们能够互相操作。本文将详细介绍适配器模…...
【Vue】全局组件和局部组件
一、全局组件 定义: 全局组件是在整个Vue应用中都可以使用的组件。它们被注册在Vue的根实例上,因此可以在任何子组件的模板中被引用,而无需在每个组件中重复注册。 注册方式: 全局组件通过Vue.component方法进行注册。这个方法接…...
react引入高德地图并初始化卫星地图
react引入高德地图并初始化卫星地图 1.安装依赖 yarn add react-amap amap/amap-jsapi-loader2.初始化地图 import AMapLoader from "amap/amap-jsapi-loader"; import { FC, useEffect, useRef, useState } from "react";const HomeRight () > {con…...
2024最简七步完成 将本地项目提交到github仓库方法
2024最简七步完成 将本地项目提交到github仓库方法 文章目录 2024最简七步完成 将本地项目提交到github仓库方法一、前言二、具体步骤1、github仓库创建2、将远程仓库拉取并合并(1)初始化本地仓库(2)本地仓库与Github仓库关联&…...
前端WebSocket入门,看这篇就够啦!!
在HTML5 的早期开发过程中,由于意识到现有的 HTTP 协议在实时通信方面的不足,开发者开始探索能够在 Web 环境下实现双向实时通信的新的通信协议,提出了 WebSocket 协议的概念。 一、什么是 WebSocket? WebSocket 是一种在单个 T…...
漏洞复现-F6-11泛微-E-Cology-SQL
本文来自无问社区,更多漏洞信息可前往查看http://www.wwlib.cn/index.php/artread/artid/15575.html 0x01 产品简介 泛微协同管理应用平台e-cology是一套企业级大型协同管理平台 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤࿰…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
