(案例贴2) html+css 倒计时器

欢迎大家使用这个计时器噢

老哥直接附代码咯.

timer.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>为我家小仙女准备的倒计时♥</title>
    <style>
        body, html {
            height: 100%;
            margin: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            background-color: #f9eae1; /* 背景色为淡粉色 */
            font-family: 'Arial', sans-serif; /* 字体 */
        }

        #clockContainer {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            margin-bottom: 20px;
            background-color: #f6e1e8; /* 控制面板背景色为浅紫色 */
            border-radius: 20px; /* 控制面板边框圆角 */
            padding: 20px;
            box-shadow: 0px 0px 10px 0px #888888; /* 控制面板阴影效果 */
        }

        #clock strong {
            font-size: 150px;
            color: #ffa9c8;
            margin-bottom: 20px;
        }

        #clockControl {
            text-align: center;
        }

        #clockControl input {
            margin: 5px;
            padding: 10px 20px;
            border: none;
            border-radius: 10px;
            background-color: #ff95bf; /* 按钮背景色为浅粉红色 */
            color: white;
            font-size: 16px;
            cursor: pointer;
            transition: background-color 0.3s;
        }

        #clockControl input:hover {
            background-color: #ff6b9c; /* 鼠标悬停时按钮背景色变为深粉红色 */
        }

        #clockControl input:active {
            background-color: #ff4785; /* 按钮按下时背景色变为更深的粉红色 */
        }

        #clockControl.hidden {
            display: none;
        }
    </style>
</head>
<body>
<div id="clockContainer">
    <div id="clock"><strong>00:00:00</strong></div>
    <div id="clockControl">
        时:<input id="hinput" type="text" value="00"/> 分
        <input id="minput" type="text" value="00"/> 秒
        <input id="sinput" type="text" value="00"/>
        <br/>
        <input id="setB" type="button" value="设置" onclick="setTime()">
        <input id="startB" type="button" value="开始" onclick="run()">
        <input id="pauseB" type="button" value="暂停" onclick="pause()">
        <input id="endB" type="button" value="停止" onclick="stop()">
        <br/>
        <input id="hiddenB" type="button" value="隐藏控制面板" onclick="toggleVisibility()">
    </div>
</div>

<!-- 添加了 clockHidden 元素 -->
<input type="hidden" id="clockHidden" value="00:00:00">

<script language="Javascript">

    var normalelapse = 1000;
    var nextelapse = normalelapse;
    var counter;
    var startTime;
    var finish = "00:00:00";
    var timer = null;
    var controlPanelVisible = true; // 保存控制面板的显示状态,默认为显示

    function toggleVisibility() {
        var element = document.getElementById('clockControl');
        if (controlPanelVisible) {
            element.classList.add('hidden');
            controlPanelVisible = false;
        } else {
            element.classList.remove('hidden');
            controlPanelVisible = true;
        }
    }

    function setTime(){
        startB.disabled = false;
        pauseB.disabled = true;
        setB.disabled = false;
        var s = sinput.value;
        var m = minput.value;
        var h = hinput.value;
        if(isNaN(h) || isNaN(m) || isNaN(s)){
            return;
        }

        var sn = new Number(s);
        var mn = new Number(m);
        var hn = new Number(h);
        var ss = sn < 10 ? ("0" + sn) : s;
        var sm = mn < 10 ? ("0" + mn) : m;
        var sh = hn < 10 ? ("0" + hn) : h;
        var init = sh + ":" + sm + ":" + ss;

        clock.innerHTML = "<strong>"+init+"</strong>";
        clockHidden.value = init;
        window.clearTimeout(timer);
        window.clearInterval(timer);
    }

    function run() {
        startB.disabled = true;
        pauseB.disabled = false;
        setB.disabled = true;
        endB.disabled = false;
        counter = 0;
        startTime = new Date().valueOf();

        timer = window.setInterval("onTimer()", nextelapse);
    }

    function pause() {
        startB.disabled = false;
        pauseB.disabled = true;
        setB.disabled = false;
        window.clearTimeout(timer);
    }

    function stop(){
        startB.disabled = false;
        pauseB.disabled = true;
        setB.disabled = false;
        endB.disabled = true;
        sinput.value = "00" ;
        minput.value = "00" ;
        hinput.value = "00" ;
        clock.innerHTML = "<strong>00:00:00</strong>"
        clockHidden.value = "00:00:00";
        window.clearTimeout(timer);
        window.clearInterval(timer);
    }

    window.onload = function() {
        pauseB.disabled = true;
    }

    function onTimer()
    {
        if (clockHidden.value == finish)
        {
            window.clearInterval(timer);
            clock.innerHTML = "<strong><font color=#013878>Time's up!</font></strong>"
            startB.disabled = true;
            pauseB.disabled = true;
            setB.disabled = false;
            endB.disabled = true;
            return;
        }

        var hms = new String(clockHidden.value).split(":");
        var s = new Number(hms[2]);
        var m = new Number(hms[1]);
        var h = new Number(hms[0]);
        s -= 1;
        if (s < 0)
        {
            s = 59;
            m -= 1;
        }

        if (m < 0)
        {
            m = 59;
            h -= 1;
        }
        var ss = s < 10 ? ("0" + s) : s;
        var sm = m < 10 ? ("0" + m) : m;
        var sh = h < 10 ? ("0" + h) : h;

        var nowtime = sh + ":" + sm + ":" + ss;
        clock.innerHTML = "<strong>"+nowtime+"</strong>";
        clockHidden.value = nowtime;

        window.clearInterval(timer);

        counter++;
        var counterSecs = counter * 1000;
        var elapseSecs = new Date().valueOf() - startTime;
        var diffSecs = counterSecs - elapseSecs;
        nextelapse = normalelapse + diffSecs;

        if (nextelapse < 0) nextelapse = 0;

        timer = window.setInterval("onTimer()", nextelapse);
    }

    // 添加点击页面空白区域显示控制面板的事件监听器
    document.addEventListener('click', function(event) {
        var clockControl = document.getElementById('clockControl');
        var isClickInsideControl = clockControl.contains(event.target);
        if (!isClickInsideControl) {
            clockControl.classList.remove('hidden');
            controlPanelVisible = true;
        }
    });

</script>

</body>
</html>

css

@import url('https://fonts.googleapis.com/css?family=Gochi+Hand:wght@400;500;600&display=swap');
html, body {
    display: flex;
    justify-content: center;
    align-items: center;
    color: hsl(198, 1%, 29%);
    font-family: 'Gochi Hand', cursive;
    text-align: center;
    font-size: 130%;
}

* {
    padding: 0;
    margin: 0;
}

/* 整个面板 */
#board {
    position: relative;
    /* 铺满整个视口 */
    width: 100vw;
    height: 100vh;
    background-color: #f1eee5;
    overflow: hidden;
    perspective: 1600px;
    display: grid;
    box-sizing: border-box;
    padding: 50px;
}

/* 底图 */
.xixi{
    width: 720px;
    height: 120px;
    position: absolute;
    left: 50%;
    bottom: 0;
    transform: translateX(-50%);
}

/* #region代办框start */
/* 整个代办框 */
.container {
    position: relative;
    height: 500px;
    width: 500px;
    background: #f1f5f8;
    /* 背景圆点绘制,每个重复的小方块大小为 ​25px × 25px​ */
    background-image: radial-gradient(#bfc0c1 7.2%, transparent 0);
    background-size: 25px 25px;
    border-radius: 20px;
    box-shadow: 4px 3px 7px 2px #00000040;
    padding: 1rem;
    box-sizing: border-box;
    /* 水平居中对齐 */
    margin: 0 auto;
}

/* 标题 */
.heading {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 1rem;
}
/* To-Do List部分样式 */
.heading__title {
    transform: rotate(2deg);
    padding: 0.2rem 1.2rem;
    border-radius: 20% 5% 20% 5%/5% 20% 25% 20%;
    background-color: hsla(53, 100%, 93%, 0.708);
    font-size: 1.5rem;
}
/* 图片元素的宽度为父元素宽度的24% */
.heading__img {
    width: 24%;
}

/* ~ Today I need to ~ */
.form__label {
    display: block;
    margin-top: -20px;
    margin-bottom: 0.5rem;
}
/* 音频 */
audio {
    width: 280px;
    height: 15px;
    margin: 0px auto;
    border: 1px solid #e0dfc6;
    border-radius: 8px;
}
/* 输入框 */
.form__input {
    box-sizing: border-box;
    background-color: transparent;
    padding: 0.3rem;
    /* 边框设置 */
    border-bottom-right-radius: 15px 3px;
    border-bottom-left-radius:3px 15px;
    border: solid 3px transparent;
    border-bottom: dashed 3px #c6beb1;
    /* 字体设置 */
    font-family: 'eryamaomiti', cursive;
    font-size: 1rem;
    color: hsla(260, 2%, 25%, 0.7);
    width: 70%;
    margin-bottom: 20px;
    /* 获得焦点时 */
    &:focus {
        /* 去掉默认的外边框样式 */
        outline: none;
        /* 框变为实线,颜色为#c6beb1 */
        border: solid 3px #c6beb1;
    }
}

/* submit按钮 */
.button {
    padding: 0;
    border: none;
    /* 顺时针旋转4度 */
    transform: rotate(4deg);
    /* 变换的起点为中心点 */
    transform-origin: center;
    font-family: 'eryamaomiti', cursive;
    text-decoration: none;
    padding-bottom: 3px;
    border-radius: 5px;
    /* 添加一个垂直的盒子阴影效果 */
    box-shadow: 0 2px 0 hsl(198, 1%, 29%);
    /* 过渡效果的时间和缓动函数 */
    transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
    /* Base64编码的背景图像 */
    background-image: url('data:image/gif;base64,R0lGODlhBAAEAIABAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjEgNjQuMTQwOTQ5LCAyMDEwLzEyLzA3LTEwOjU3OjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NUY1OENCRDdDMDYxMUUyOTEzMEE1MEM5QzM0NDVBMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5NUY1OENCRTdDMDYxMUUyOTEzMEE1MEM5QzM0NDVBMyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjk1RjU4Q0JCN0MwNjExRTI5MTMwQTUwQzlDMzQ0NUEzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjk1RjU4Q0JDN0MwNjExRTI5MTMwQTUwQzlDMzQ0NUEzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAQAsAAAAAAQABAAAAgYEEpdoeQUAOw==');
    background-color: hsla(0, 0%, 100%, 0.7);
}
/* 按钮内文本样式 */
.button span {
    background: #f1f5f8;
    display: block;
    padding: 0.5rem 1rem;
    border-radius: 5px;
    border: 2px solid hsl(198, 1%, 29%);
}
/* 按钮在激活状态和获取焦点时 */
.button:active, .button:focus {
    transform: translateY(4px);
    padding-bottom: 0px;
    outline: 0;
}

/* 代办事项列表 */
.toDoList {
    padding-left: 2.5rem;
    text-align: left;
}
li {
    position: relative;
    padding-top: 0.2rem;
    font-size: 24px;
    color: #3c4654;
    font-family: 'eryamaomiti', cursive;
}
/* 悬停时添加删除线效果 */
li:hover {
    text-decoration: line-through #d5c8a0;
}

/* 右下角的三个爪子 */
.cute1{
    position: absolute;
    bottom: 5px;
    right: 70px;
    width: 100px;
    height: 100px;
}
.cute2{
    position: absolute;
    bottom: 70px;
    right: 5px;
    width: 100px;
    height: 100px;
}
.cute3{
    position: absolute;
    bottom: 0;
    right: 0;
    width: 100px;
    height: 100px;
}
/* #endregion代办框end */

/* #region便利贴start */
/* 便利贴样式 */
.stickynote {
    position: absolute;
    width: 200px;
    height: 200px;
    box-sizing: border-box;
    padding: 10px;
    transform: rotateX(5deg);
    box-shadow: -1px 10px 5px -4px rgba(0, 0, 0, 0.02),
    inset 0 24px 30px -12px rgba(0, 0, 0, 0.2);
    /* 之后便利贴内文本框居中 */
    display: flex;
    justify-content: center;
    align-items: center;
}
/* 便利贴文本框 */
.stickynote-text {
    border-radius: 10px;
    color: #686a67;
    font-size: 20px;
    font-weight: 400;
    border: none;
    background: transparent;
    outline: none;
    text-align: center;
    resize: none;
    overflow: hidden;
    font-family: 'eryamaomiti', cursive;
}
/* 获得焦点时 */
.stickynote-text:focus {
    background-color: rgba(0,0,0,0.2);
}
/* 占位符(输入文本前的文本显示) */
.stickynote-text::placeholder {
    color: #686a67;
    opacity: 30%;
}
/* #endregion便利贴end */

/* #region时钟start */
.clock {
    margin: -80px auto;
    height: 10vh;
    color: #e2a2aca1;
    font-size: 10vh;
    font-family: 'eryamaomiti';
    line-height: 10vh;
    display: flex;
    position: relative;
    overflow: hidden;
}
.clock > div {
    display: flex;
}
.tick {
    line-height: 7vh;
}
.tick-hidden {
    opacity: 0;
}
/* 线性过渡,持续时间为1s */
.move {
    animation: move linear 1s infinite;
}
@keyframes move {
    from {
        transform: translateY(0vh);
    }
    to {
        transform: translateY(-10vh);
    }
}
/* #endregion时钟end */

为我家小仙女准备的倒计时♥

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

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

相关文章

群控代理IP搭建教程:打造一流的网络爬虫

目录 前言 一、什么是群控代理IP&#xff1f; 二、搭建群控代理IP的步骤 1. 获取代理IP资源 2. 配置代理IP池 3. 选择代理IP策略 4. 编写代理IP设置代码 5. 异常处理 三、总结 前言 群控代理IP是一种常用于网络爬虫的技术&#xff0c;通过使用多个代理IP实现并发请求…

快速下载Huggingface的大语言模型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Huggingface是什么&#xff1f;二、基于官方huggingface-cli下载&#xff08;基础&#xff0c;断线风险&#xff09;1.安装hf下载环境2.配置环境变量3.注册…

【Ai生态开发】Spring AI上架,打造专属业务大模型,AI开发再也不是难事!

大家好 这里是苏泽 后端是工作 ai是兴趣 对于ai的产生我的立场是拥抱ai的 是希望拿他作为提升能力的工具 那么这一篇带大家来学习如何使用ai打造一个专属的业务大模型 需求 就是说假设现在有一个 商城系统 里面有查询订单的api和获取商品购买方式的api 用户只需要输入 “…

2024年2月24日~2024年3月1日周报(调整网络结构)

文章目录 一、前言二、实验情况2.1 结果展示2.2 灵感收集 三、小结 一、前言 上周学习了数学表达式、了解了DDNet的网络框架。   在本周&#xff0c;寻找改进网络框架与超参数的灵感&#xff0c;并跑代码查看效果。另外&#xff0c;完成了毕业设计开题报告任务。 二、实验情…

【javaEE-唠嗑局】如何用jconsole观察进程里的多线程情况

&#x1f4e2;编程环境&#xff1a;idea 如何用jconsole观察进程里的多线程情况 1. 打开jdk2. 打开jconsole3. 查看每个线程的情况 以下面这段代码为例&#xff1a;代码运行时&#xff0c;包括一个进程&#xff0c;该进程中有两个线程。 package thread; public class Demo1 …

无法调试MFC源码

VS无法调试MFC源码 起初 有时候就是这么无奈&#xff0c;MFC源码各种问题没有办法调试&#xff0c;可是又想看下代码如何调用&#xff0c;里面做了些什么&#xff0c;从哪儿调出&#xff0c;学习一下大神的思路什么的。整理一下有可能的原因。 检查生成代码设置 需要设置正…

十二、Nacos源码系列:Nacos配置中心原理(四)- RefreshEvent 事件处理

前面文章&#xff0c;我们说到回调监听器的方法中&#xff0c;主要就是发布了一个RefreshEvent事件&#xff0c;这个事件主要由 SpringCloud 相关类来处理。今天我们继续分析后续的流程。 RefreshEvent 事件会由 RefreshEventListener 来处理&#xff0c;该 listener 含有一个 …

【YOLO系列】YOLOv9论文超详细解读(翻译 +学习笔记)

前言 时隔一年&#xff0c;YOLOv8还没捂热&#xff0c;YOLO系列最新版本——YOLOv9 终于闪亮登场&#xff01; YOLOv9的一作和v7一样。v4也有他。 他于2017年获得台湾省National Central University计算机科学与信息工程博士学位&#xff0c;现在就职于该省Academia Sinica的…

计算机二级MySQL-错题、知识点合集04

计算机二级MySQL 第四章 索引 主键约束&#xff0c;不允许为空也不允许重复。 NOT NULL非空约束属于自定义完整约束 PRIMARY KEY 属于实体完整性约束 FOREIGN KEY外键约束 外键与其引用的主键应分别属于不同的表&#xff0c;可以属于同一个关系&#xff1b;一个关系中可以定…

【java 基础】闲话 ClassLoader 和 SPI (一)

文章目录 引子双亲委派模型你真的明白了吗&#xff1f; 双亲委派“不够用了”SPI机制 其他琐碎 引子 有别于 java 提供的 IO 模块&#xff0c;java 中的classloader主要是用来加载类的&#xff0c;当然除了加载类&#xff0c;也可以加载资源文件。 那么首先我们会问一个问题&…

光伏业务管理软件有哪些推荐?

光伏业务管理软件是用于光伏电站的设计、施工、运营和维护等各个环节的软件工具。以下是一些推荐的光伏业务管理软件&#xff1a; PVsyst 这是一款全球广泛使用的光伏系统设计软件&#xff0c;可以进行详细的系统设计&#xff0c;包括组件匹配、逆变器选择、系统布局等。 鹧…

电子信息行业数字化转型创新应用挑战赛火热进行中,速戳

由深圳市宝安区人民政府、中国信息通信研究院联合举办的“第七届工业互联网数据创新应用大赛——解决方案赛道&#xff1a;电子信息行业数字化转型创新应用挑战赛”火热进行中&#xff01;大赛报名时间截至2024年3月15日&#xff0c;并将于3月25日在深圳宝安进行线下决赛答辩。…

如何辨别GPT3还是GPT4?

辨别后台使用的是GPT3还是GPT4可以提问以下问题验证&#xff1a; 1.昨天的当天的明天是哪天&#xff1f; 2.树上有9只鸟&#xff0c;猎人射杀了一只&#xff0c;还剩下多少只&#xff1f; 3.为什么周树人要打鲁迅&#xff1f; GPT3回答&#xff1a; GPT4回答&#xff1a; 如…

全闪存加速信创数据库数仓一体机解决方案

立足行业&#xff0c;深度解读 在新的大数据生态中&#xff0c;传统数据库/数据仓库技术和产品成为大数据生态中的组成部分&#xff0c;对结构化数据的存储和计算进行支撑。 数据库&数据仓库一体机是高端、核心数据管理产品&#xff0c;在我国党政、银行、交通等领域广泛…

市场热点袭来,直接加仓可靠吗?九方智投洪帮主助投资者明确几大要点

消费电子近期再度走强&#xff0c;多企业均出现涨停。消费电子出现乐观局面&#xff0c;有投资者认为是因为目前市场需求旺盛&#xff0c;产业链正在积极拉货&#xff0c;持续加单&#xff0c;各类手机新机也在积极备货&#xff0c;消费电子库存低。面对市场情绪高涨&#xff0…

LabVIEW最佳传输系统设计

LabVIEW最佳传输系统设计 介绍了基于LabVIEW软件开发的最佳基带传输系统和最佳带通传输系统的设计。通过软件仿真实现了脉冲成形滤波器和匹配滤波器的设计&#xff0c;证明了系统在消除码间干扰和抗噪声方面的优异性能。此设计不仅激发了学生的学习兴趣&#xff0c;还有助于提…

AI智能分析网关V4车辆违停算法在园区场景中的应用及特点

随着城市化进程的加速&#xff0c;车辆违停问题愈发严重&#xff0c;给城市交通带来了极大的困扰。为了解决这一问题&#xff0c;AI技术逐渐被应用于车辆违停的检测中。AI检测算法在车辆违停方面的应用&#xff0c;主要是通过计算机视觉技术&#xff0c;对道路上的车辆进行实时…

nodejs配置环境变量后不生效(‘node‘ 不是内部或外部命令,也不是可运行的程序或批处理文件)

一、在我们安装Node.js后&#xff0c;有时候会遇到node命令不管用的情况&#xff0c;关键是在安装时候已经添加配置了环境变量&#xff0c;向下面这样 但是还是不管用&#xff0c;这是因为环境变量配置不正确&#xff0c;权重不够&#xff0c;或者是命令冲突导致&#xff0c;解…

人工智能驱动的自拍时代:短视频美颜SDK技术的发展趋势

在短视频自拍的过程中&#xff0c;美颜技术的应用已经成为了许多人的必备工具&#xff0c;其中短视频美颜SDK技术的发展更是推动了自拍时代的进步。 1.人工智能技术的崛起 传统的美颜功能主要是通过简单的图像处理和滤镜效果来实现&#xff0c;但是这种方法往往会导致照片失真…

【Java】UWB高精度工业定位系统项目源代码

目录 UWB技术原理 优势 1. 高精度&#xff1a; 2. 抗干扰能力强&#xff1a; 3. 定位范围广&#xff1a; 4. 实时性强&#xff1a; 应用前景 定位系统源码功能介绍 实时定位&#xff1a; 轨迹回放&#xff1a; 区域管理&#xff1a; 巡检管理: 数据可视化分析&…
最新文章