You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1106 lines
37 KiB

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>战场探索系统</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background-color: #1F2937;
color: #F3F4F6;
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
/* 顶部控制栏 */
.top-bar {
background-color: #374151;
padding: 10px 15px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #4B5563;
z-index: 100;
}
.menu {
display: flex;
gap: 15px;
}
.menu-item {
padding: 6px 12px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
}
.menu-item:hover {
background-color: #4B5563;
}
.device-controls {
display: flex;
gap: 10px;
}
.view-toggle {
display: flex;
gap: 5px;
}
.system-status {
display: flex;
align-items: center;
gap: 10px;
}
.status-indicator {
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #10B981;
}
/* 主内容区 */
.main-content {
display: flex;
flex: 1;
overflow: hidden;
}
/* 左侧设备管理面板 */
.left-panel {
width: 300px;
background-color: #374151;
border-radius: 8px;
margin: 10px;
display: flex;
flex-direction: column;
overflow: hidden;
}
.panel-title {
font-size: 16px;
font-weight: bold;
color: #F9FAFB;
padding: 10px 15px;
border-bottom: 1px solid #4B5563;
}
.add-device {
margin: 10px;
padding: 8px 0;
background-color: #F59E0B;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-weight: bold;
display: flex;
justify-content: center;
align-items: center;
gap: 5px;
}
.device-list {
flex: 1;
overflow-y: auto;
}
.device-item {
padding: 10px;
border-bottom: 1px solid #4B5563;
display: flex;
align-items: center;
gap: 10px;
}
.device-icon {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
color: white;
border-radius: 4px;
}
.drone-icon {
background-color: #3B82F6;
}
.robot-icon {
background-color: #10B981;
}
.device-info {
flex: 1;
}
.device-name {
font-weight: bold;
margin-bottom: 2px;
}
.device-ip {
font-size: 12px;
color: #9CA3AF;
}
.device-coords {
font-size: 12px;
white-space: nowrap;
}
.device-status {
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #10B981;
}
.battery-bar {
width: 60px;
height: 8px;
background-color: #4B5563;
border-radius: 4px;
overflow: hidden;
}
.battery-level {
height: 100%;
}
.battery-high {
background-color: #10B981;
}
.battery-medium {
background-color: #F59E0B;
}
.battery-low {
background-color: #EF4444;
}
/* 中央地图区域 */
.map-area {
flex: 1;
border-radius: 8px;
margin: 10px;
overflow: hidden;
position: relative;
}
#map {
width: 100%;
height: 100%;
}
.map-controls {
position: absolute;
top: 10px;
right: 10px;
background-color: rgba(55, 65, 81, 0.8);
border-radius: 4px;
padding: 5px;
display: flex;
flex-direction: column;
gap: 5px;
}
.map-control-btn {
width: 30px;
height: 30px;
border-radius: 4px;
background-color: #4B5563;
border: none;
color: white;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.map-control-btn:hover {
background-color: #6B7280;
}
.layer-toggle {
position: absolute;
bottom: 20px;
left: 20px;
background-color: rgba(55, 65, 81, 0.8);
border-radius: 4px;
padding: 5px;
display: flex;
gap: 5px;
}
.layer-btn {
padding: 5px 10px;
border-radius: 4px;
background-color: #4B5563;
border: none;
color: white;
cursor: pointer;
font-size: 12px;
}
.layer-btn.active {
background-color: #3B82F6;
}
/* 右侧功能面板 */
.right-panel {
width: 350px;
background-color: #374151;
border-radius: 8px;
margin: 10px;
display: flex;
flex-direction: column;
overflow: hidden;
}
.tab-buttons {
display: flex;
border-bottom: 1px solid #4B5563;
}
.tab-btn {
flex: 1;
padding: 10px;
background-color: #4B5563;
border: none;
color: #F3F4F6;
cursor: pointer;
transition: all 0.2s;
}
.tab-btn.active {
background-color: #374151;
border-bottom: 2px solid #3B82F6;
}
.tab-content {
flex: 1;
overflow-y: auto;
padding: 10px;
}
.tab-pane {
display: none;
}
.tab-pane.active {
display: block;
}
/* 战场探索模块样式 */
.sub-tab {
margin-bottom: 15px;
}
.sub-tab-buttons {
display: flex;
margin-bottom: 10px;
gap: 5px;
}
.sub-tab-btn {
padding: 5px 10px;
border-radius: 4px;
background-color: #4B5563;
border: none;
color: #F3F4F6;
cursor: pointer;
font-size: 12px;
}
.sub-tab-btn.active {
background-color: #3B82F6;
}
.map-display {
background-color: #1F2937;
height: 180px;
border-radius: 4px;
margin-bottom: 10px;
display: flex;
align-items: center;
justify-content: center;
color: #9CA3AF;
}
.control-buttons {
display: flex;
gap: 10px;
margin-bottom: 15px;
}
.control-btn {
flex: 1;
padding: 8px;
border-radius: 4px;
background-color: #4B5563;
border: none;
color: #F3F4F6;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
}
.control-btn i {
font-size: 16px;
}
.control-btn span {
font-size: 12px;
}
.camera-view {
background-color: #1F2937;
height: 180px;
border-radius: 4px;
margin-bottom: 10px;
position: relative;
overflow: hidden;
}
.camera-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: #9CA3AF;
}
.camera-overlay {
position: absolute;
bottom: 10px;
right: 10px;
display: flex;
gap: 10px;
}
.camera-btn {
width: 36px;
height: 36px;
border-radius: 50%;
background-color: rgba(55, 65, 81, 0.8);
border: none;
color: white;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.camera-btn:hover {
background-color: rgba(75, 85, 99, 0.8);
}
.slider-control {
margin-bottom: 15px;
}
.slider-label {
display: flex;
justify-content: space-between;
font-size: 12px;
margin-bottom: 5px;
}
input[type="range"] {
width: 100%;
height: 4px;
background-color: #4B5563;
border-radius: 2px;
outline: none;
-webkit-appearance: none;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
width: 16px;
height: 16px;
border-radius: 50%;
background-color: #3B82F6;
cursor: pointer;
}
/* 情报传输模块样式 */
.talk-control {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 20px;
}
.talk-button {
width: 80px;
height: 80px;
border-radius: 50%;
background-color: #EF4444;
border: none;
color: white;
font-size: 24px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 10px;
transition: all 0.2s;
}
.talk-button:hover {
background-color: #DC2626;
transform: scale(1.05);
}
.talk-button.active {
background-color: #10B981;
}
.volume-control {
width: 100%;
margin-bottom: 15px;
}
.call-history {
border-top: 1px solid #4B5563;
padding-top: 15px;
}
.history-item {
padding: 8px 0;
border-bottom: 1px solid #4B5563;
display: flex;
justify-content: space-between;
align-items: center;
}
.history-info {
display: flex;
flex-direction: column;
}
.history-contact {
font-weight: bold;
}
.history-time {
font-size: 12px;
color: #9CA3AF;
}
.history-duration {
font-size: 12px;
color: #9CA3AF;
}
/* 敌情统计模块样式 */
.enemy-overview {
background-color: #1F2937;
border-radius: 8px;
padding: 15px;
margin-bottom: 15px;
}
.overview-title {
font-weight: bold;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: center;
}
.threat-level {
display: flex;
align-items: center;
gap: 5px;
font-size: 12px;
color: #F59E0B;
}
.chart-container {
height: 150px;
margin-bottom: 15px;
position: relative;
}
.enemy-list {
border-top: 1px solid #4B5563;
padding-top: 15px;
}
.enemy-item {
padding: 8px 0;
border-bottom: 1px solid #4B5563;
display: flex;
justify-content: space-between;
}
.enemy-type {
font-weight: bold;
}
.enemy-details {
text-align: right;
font-size: 12px;
}
.analysis-section {
margin-top: 15px;
}
.analysis-input {
width: 100%;
background-color: #1F2937;
border: 1px solid #4B5563;
border-radius: 4px;
padding: 8px 10px;
color: #F3F4F6;
margin-bottom: 10px;
resize: none;
height: 60px;
}
.analysis-btn {
background-color: #3B82F6;
color: white;
border: none;
border-radius: 4px;
padding: 8px 15px;
cursor: pointer;
margin-bottom: 10px;
}
.analysis-result {
background-color: #1F2937;
border-radius: 4px;
padding: 10px;
font-size: 13px;
max-height: 100px;
overflow-y: auto;
}
/* 底部状态栏 */
.status-bar {
background-color: #374151;
padding: 5px 15px;
display: flex;
justify-content: space-between;
font-size: 12px;
color: #9CA3AF;
border-top: 1px solid #4B5563;
}
.status-item {
display: flex;
align-items: center;
gap: 5px;
}
/* 响应式设计 */
@media (max-width: 1200px) {
.left-panel, .right-panel {
width: 250px;
}
}
@media (max-width: 992px) {
.left-panel {
width: 200px;
}
.right-panel {
width: 220px;
}
}
/* 自定义滚动条 */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: #374151;
}
::-webkit-scrollbar-thumb {
background: #4B5563;
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: #6B7280;
}
</style>
</head>
<body>
<!-- 顶部控制栏 -->
<div class="top-bar">
<div class="menu">
<div class="menu-item"><i class="fas fa-bars"></i> 菜单</div>
<div class="menu-item"><i class="fas fa-file-alt"></i> 任务</div>
<div class="menu-item"><i class="fas fa-cog"></i> 设置</div>
</div>
<div class="device-controls">
<button class="menu-item"><i class="fas fa-power-off"></i> 电源</button>
<button class="menu-item"><i class="fas fa-sync"></i> 同步</button>
<button class="menu-item"><i class="fas fa-bell"></i> 警报</button>
</div>
<div class="view-toggle">
<button class="menu-item active">标准视图</button>
<button class="menu-item">全屏视图</button>
</div>
<div class="system-status">
<div class="status-indicator"></div>
<span>系统正常运行中</span>
</div>
</div>
<!-- 主内容区 -->
<div class="main-content">
<!-- 左侧设备管理面板 -->
<div class="left-panel">
<div class="panel-title">设备管理</div>
<button class="add-device"><i class="fas fa-plus"></i> 添加设备</button>
<div class="device-list">
<div class="device-item">
<div class="device-icon drone-icon">
<i class="fas fa-drone"></i>
</div>
<div class="device-info">
<div class="device-name">侦察机-01</div>
<div class="device-ip">IP: 192.168.1.101</div>
</div>
<div class="device-coords">N39.90, E116.40</div>
<div class="device-status"></div>
<div class="battery-bar">
<div class="battery-level battery-high" style="width: 75%"></div>
</div>
</div>
<div class="device-item">
<div class="device-icon robot-icon">
<i class="fas fa-robot"></i>
</div>
<div class="device-info">
<div class="device-name">探测狗-02</div>
<div class="device-ip">IP: 192.168.1.102</div>
</div>
<div class="device-coords">N39.91, E116.41</div>
<div class="device-status"></div>
<div class="battery-bar">
<div class="battery-level battery-medium" style="width: 45%"></div>
</div>
</div>
<div class="device-item">
<div class="device-icon drone-icon">
<i class="fas fa-drone"></i>
</div>
<div class="device-info">
<div class="device-name">侦察机-03</div>
<div class="device-ip">IP: 192.168.1.103</div>
</div>
<div class="device-coords">N39.92, E116.39</div>
<div class="device-status" style="background-color: #F59E0B;"></div>
<div class="battery-bar">
<div class="battery-level battery-low" style="width: 15%"></div>
</div>
</div>
<div class="device-item">
<div class="device-icon robot-icon">
<i class="fas fa-robot"></i>
</div>
<div class="device-info">
<div class="device-name">探测狗-04</div>
<div class="device-ip">IP: 192.168.1.104</div>
</div>
<div class="device-coords">N39.89, E116.42</div>
<div class="device-status" style="background-color: #EF4444;"></div>
<div class="battery-bar">
<div class="battery-level battery-high" style="width: 85%"></div>
</div>
</div>
</div>
</div>
<!-- 中央地图区域 -->
<div class="map-area">
<div id="map"></div>
<div class="map-controls">
<button class="map-control-btn" title="放大"><i class="fas fa-plus"></i></button>
<button class="map-control-btn" title="缩小"><i class="fas fa-minus"></i></button>
<button class="map-control-btn" title="重置视图"><i class="fas fa-compress-arrows-alt"></i></button>
</div>
<div class="layer-toggle">
<button class="layer-btn active">标准</button>
<button class="layer-btn">卫星</button>
<button class="layer-btn">地形</button>
</div>
</div>
<!-- 右侧功能面板 -->
<div class="right-panel">
<div class="panel-title">功能面板</div>
<div class="tab-buttons">
<button class="tab-btn active" data-tab="exploration">战场探索</button>
<button class="tab-btn" data-tab="intelligence">情报传输</button>
<button class="tab-btn" data-tab="statistics">敌情统计</button>
</div>
<div class="tab-content">
<!-- 战场探索模块 -->
<div class="tab-pane active" id="exploration">
<div class="sub-tab">
<div class="sub-tab-buttons">
<button class="sub-tab-btn active">机器狗</button>
<button class="sub-tab-btn">无人机</button>
</div>
<div class="map-display">
<i class="fas fa-map-marked-alt fa-2x"></i>
</div>
<div class="control-buttons">
<button class="control-btn">
<i class="fas fa-play"></i>
<span>开始建图</span>
</button>
<button class="control-btn">
<i class="fas fa-pause"></i>
<span>暂停</span>
</button>
<button class="control-btn">
<i class="fas fa-save"></i>
<span>保存</span>
</button>
</div>
<div class="slider-control">
<div class="slider-label">
<span>导航速度</span>
<span>50%</span>
</div>
<input type="range" min="0" max="100" value="50">
</div>
<div class="slider-control">
<div class="slider-label">
<span>避障灵敏度</span>
<span>70%</span>
</div>
<input type="range" min="0" max="100" value="70">
</div>
</div>
</div>
<!-- 情报传输模块 -->
<div class="tab-pane" id="intelligence">
<div class="talk-control">
<button class="talk-button" id="talkButton">
<i class="fas fa-microphone"></i>
</button>
<span>按住说话</span>
</div>
<div class="volume-control slider-control">
<div class="slider-label">
<span>音量</span>
<span>80%</span>
</div>
<input type="range" min="0" max="100" value="80">
</div>
<div class="call-history">
<div class="history-item">
<div class="history-info">
<div class="history-contact">指挥中心</div>
<div class="history-time">今天 09:45</div>
</div>
<div class="history-duration">05:23</div>
</div>
<div class="history-item">
<div class="history-info">
<div class="history-contact">侦察小队A</div>
<div class="history-time">今天 08:12</div>
</div>
<div class="history-duration">02:47</div>
</div>
<div class="history-item">
<div class="history-info">
<div class="history-contact">火力支援单位</div>
<div class="history-time">昨天 16:30</div>
</div>
<div class="history-duration">08:15</div>
</div>
</div>
</div>
<!-- 敌情统计模块 -->
<div class="tab-pane" id="statistics">
<div class="enemy-overview">
<div class="overview-title">
<span>敌情概览</span>
<div class="threat-level">
<i class="fas fa-exclamation-triangle"></i>
<span>威胁等级: 中</span>
</div>
</div>
<div class="chart-container">
<canvas id="enemyChart"></canvas>
</div>
<div style="display: flex; justify-content: space-around; font-size: 12px;">
<div><span style="color: #3B82F6;"></span> 步兵</div>
<div><span style="color: #10B981;"></span> 装甲车辆</div>
<div><span style="color: #F59E0B;"></span> 防空单位</div>
<div><span style="color: #EF4444;"></span> 指挥中心</div>
<div><span style="color: #9CA3AF;"></span> 未知</div>
</div>
</div>
<div class="enemy-list">
<div class="enemy-item">
<div class="enemy-type">步兵单位</div>
<div class="enemy-details">
<div>数量: 35</div>
<div>最后更新: 10分钟前</div>
</div>
</div>
<div class="enemy-item">
<div class="enemy-type">装甲车辆</div>
<div class="enemy-details">
<div>数量: 15</div>
<div>最后更新: 30分钟前</div>
</div>
</div>
<div class="enemy-item">
<div class="enemy-type">防空单位</div>
<div class="enemy-details">
<div>数量: 10</div>
<div>最后更新: 1小时前</div>
</div>
</div>
</div>
<div class="analysis-section">
<textarea class="analysis-input" placeholder="输入分析请求..."></textarea>
<button class="analysis-btn">获取分析结果</button>
<div class="analysis-result">
分析结果:根据当前敌情分布,建议优先摧毁西北方向的防空单位,以确保无人机侦察路线安全。步兵单位主要集中在东部区域,可能设有伏击点。
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 底部状态栏 -->
<div class="status-bar">
<div class="status-item"><i class="fas fa-wifi"></i> 连接状态: 正常</div>
<div class="status-item"><i class="fas fa-sync-alt"></i> 数据同步: 最新</div>
<div class="status-item"><i class="fas fa-clock"></i> 系统时间: 2023-11-15 14:30:45</div>
<div class="status-item"><i class="fas fa-microchip"></i> CPU: 35% 内存: 42%</div>
</div> <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
// 初始化地图
const map = L.map('map').setView([39.9042, 116.4074], 14);
// 添加地图图层
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// 添加设备标记
const droneIcon = L.divIcon({
className: 'custom-div-icon',
html: '<div style="background-color: #3B82F6; width: 20px; height: 20px; border-radius: 50%; display: flex; align-items: center; justify-content: center;"><i class="fas fa-drone" style="color: white; font-size: 12px;"></i></div>',
iconSize: [20, 20],
iconAnchor: [10, 10]
});
const robotIcon = L.divIcon({
className: 'custom-div-icon',
html: '<div style="background-color: #10B981; width: 20px; height: 20px; border-radius: 50%; display: flex; align-items: center; justify-content: center;"><i class="fas fa-robot" style="color: white; font-size: 12px;"></i></div>',
iconSize: [20, 20],
iconAnchor: [10, 10]
});
const enemyIcon = L.divIcon({
className: 'custom-div-icon',
html: '<div style="background-color: #EF4444; width: 16px; height: 16px; border-radius: 50%; border: 2px solid white;"></div>',
iconSize: [20, 20],
iconAnchor: [10, 10]
});
// 添加设备标记到地图
L.marker([39.9042, 116.4074], {icon: droneIcon}).addTo(map)
.bindPopup("<b>侦察机-01</b><br>状态: 正常<br>电量: 75%");
L.marker([39.9142, 116.4174], {icon: robotIcon}).addTo(map)
.bindPopup("<b>探测狗-02</b><br>状态: 正常<br>电量: 45%");
L.marker([39.9242, 116.3974], {icon: droneIcon}).addTo(map)
.bindPopup("<b>侦察机-03</b><br>状态: 低电量警告<br>电量: 15%");
// 添加敌军标记
L.marker([39.90, 116.42], {icon: enemyIcon}).addTo(map)
.bindPopup("<b>敌军步兵</b><br>数量: 约10人<br>最后更新: 5分钟前");
L.marker([39.92, 116.43], {icon: enemyIcon}).addTo(map)
.bindPopup("<b>装甲车辆</b><br>类型: 坦克x2<br>最后更新: 20分钟前");
L.marker([39.89, 116.39], {icon: enemyIcon}).addTo(map)
.bindPopup("<b>防空单位</b><br>状态: 活跃<br>最后更新: 35分钟前");
// 初始化敌情统计图表
const ctx = document.getElementById('enemyChart').getContext('2d');
const enemyChart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: ['步兵', '装甲车辆', '防空单位', '指挥中心', '未知'],
datasets: [{
data: [35, 15, 10, 5, 35],
backgroundColor: [
'#3B82F6',
'#10B981',
'#F59E0B',
'#EF4444',
'#9CA3AF'
],
borderWidth: 0
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
label: function(context) {
const label = context.label || '';
const value = context.raw || 0;
const total = context.dataset.data.reduce((a, b) => a + b, 0);
const percentage = Math.round((value / total) * 100);
return `${label}: ${value} (${percentage}%)`;
}
}
}
},
cutout: '70%'
}
});
// 标签页切换功能
document.querySelectorAll('.tab-btn').forEach(button => {
button.addEventListener('click', () => {
// 移除所有标签按钮的active类
document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
// 给当前点击的按钮添加active类
button.classList.add('active');
// 获取目标标签页ID
const tabId = button.getAttribute('data-tab');
// 隐藏所有标签页内容
document.querySelectorAll('.tab-pane').forEach(pane => pane.classList.remove('active'));
// 显示目标标签页内容
document.getElementById(tabId).classList.add('active');
});
});
// 子标签页切换功能
document.querySelectorAll('.sub-tab-btn').forEach(button => {
button.addEventListener('click', () => {
// 移除所有子标签按钮的active类
document.querySelectorAll('.sub-tab-btn').forEach(btn => btn.classList.remove('active'));
// 给当前点击的按钮添加active类
button.classList.add('active');
// 这里可以添加切换内容的逻辑
const isRobot = button.textContent === '机器狗';
const mapDisplay = document.querySelector('.map-display');
const controlButtons = document.querySelectorAll('.control-btn span');
if (isRobot) {
mapDisplay.innerHTML = '<i class="fas fa-map-marked-alt fa-2x"></i>';
controlButtons[0].textContent = '开始建图';
controlButtons[1].textContent = '暂停';
controlButtons[2].textContent = '保存';
} else {
mapDisplay.innerHTML = '<div class="camera-view"><div class="camera-placeholder"><i class="fas fa-video fa-2x"></i></div></div>';
controlButtons[0].textContent = '开始拍摄';
controlButtons[1].textContent = '暂停';
controlButtons[2].textContent = '分析';
}
});
});
// 通话按钮功能
const talkButton = document.getElementById('talkButton');
talkButton.addEventListener('mousedown', () => {
talkButton.classList.add('active');
talkButton.innerHTML = '<i class="fas fa-microphone-slash"></i>';
document.querySelector('.talk-control span').textContent = '正在录音...';
});
talkButton.addEventListener('mouseup', () => {
talkButton.classList.remove('active');
talkButton.innerHTML = '<i class="fas fa-microphone"></i>';
document.querySelector('.talk-control span').textContent = '按住说话';
});
talkButton.addEventListener('mouseleave', () => {
talkButton.classList.remove('active');
talkButton.innerHTML = '<i class="fas fa-microphone"></i>';
document.querySelector('.talk-control span').textContent = '按住说话';
});
// 地图图层切换
document.querySelectorAll('.layer-btn').forEach(button => {
button.addEventListener('click', () => {
document.querySelectorAll('.layer-btn').forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
// 这里可以添加切换地图图层的逻辑
const layerType = button.textContent;
console.log(`切换到${layerType}图层`);
});
});
</script>
</body>
</html>