打造沉浸式古诗欣赏页面:HTML5视频背景与音频的完美结合

article/2025/7/29 6:00:12

个人名片
在这里插入图片描述
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?

  • 专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀

目录

  • 《打造沉浸式古诗欣赏页面:HTML5视频背景与音频的完美结合》
    • 引言
    • 一、项目概述与设计理念
      • 1.1 项目目标
      • 1.2 设计理念
    • 二、基础HTML结构
      • 2.1 文档基本结构
      • 2.2 关键元素说明
    • 三、CSS样式设计
      • 3.1 基础样式设置
      • 3.2 诗歌容器样式
      • 3.3 控制按钮样式
    • 四、JavaScript交互实现
      • 4.1 基础控制逻辑
      • 4.2 处理浏览器自动播放策略
      • 4.3 增强用户体验
    • 五、解决常见问题与优化
      • 5.1 浏览器兼容性问题解决方案
      • 5.2 性能优化
      • 5.3 响应式设计调整
    • 六、完整代码整合
    • 七、扩展思路与未来改进
      • 7.1 可能的扩展功能
      • 7.2 性能进一步提升
      • 7.3 无障碍访问改进
    • 结语

《打造沉浸式古诗欣赏页面:HTML5视频背景与音频的完美结合》

引言

在当今数字化时代,传统文化与现代技术的融合为文学欣赏带来了全新的体验。本文将以唐代诗人李绅的《悯农》为例,详细介绍如何创建一个结合视频背景和背景音乐的古诗欣赏网页。我们将从基础结构开始,逐步解决实际开发中遇到的浏览器兼容性问题,最终打造一个既美观又功能完善的页面。

一、项目概述与设计理念

1.1 项目目标

我们的目标是创建一个沉浸式的古诗欣赏体验,通过视觉和听觉元素增强诗歌的感染力。具体要实现:

  • 全屏视频背景展示田园风光
  • 优雅排版的古诗文本
  • 背景音乐营造氛围
  • 用户友好的控制界面

1.2 设计理念

"形式服务于内容"是我们的核心设计理念。所有技术元素都旨在强化诗歌的主题——农民劳作的艰辛和粮食的来之不易。视频选择田野劳作场景,音乐采用舒缓的古典风格,颜色搭配上使用金色文字象征稻谷,深色背景象征土地。

二、基础HTML结构

2.1 文档基本结构

<!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 href="https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&display=swap" rel="stylesheet"><style>/* 样式将在下一部分详细介绍 */</style>
</head>
<body><!-- 视频背景 --><video autoplay muted loop id="video-background"><source src="assets/farmland.mp4" type="video/mp4"><!-- 备用内容 --></video><!-- 古诗内容容器 --><div class="poem-container"><h1>悯农</h1><div class="poem"><p>锄禾日当午,汗滴禾下土。</p><p>谁知盘中餐,粒粒皆辛苦。</p></div><div class="author">—— 李绅</div></div><!-- 背景音乐 --><audio id="bg-music" loop><source src="assets/chinese-garden.mp3" type="audio/mpeg"></audio><script>// JavaScript交互代码</script>
</body>
</html>

2.2 关键元素说明

  1. 视频背景:使用<video>标签实现全屏背景,添加autoplaymutedloop属性确保自动循环播放
  2. 诗歌容器:包含标题、诗歌正文和作者信息
  3. 背景音乐:使用<audio>标签,设置为循环播放
  4. 备用内容:为不支持视频的浏览器提供降级方案

三、CSS样式设计

3.1 基础样式设置

body {margin: 0;padding: 0;height: 100vh;display: flex;justify-content: center;align-items: center;font-family: "楷体", "STKaiti", "Ma Shan Zheng", serif;overflow: hidden;color: #fff;text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
}#video-background {position: fixed;right: 0;bottom: 0;min-width: 100%;min-height: 100%;z-index: -1;object-fit: cover;
}

3.2 诗歌容器样式

.poem-container {background-color: rgba(0, 0, 0, 0.6);padding: 40px;border-radius: 10px;max-width: 600px;text-align: center;backdrop-filter: blur(5px);border: 1px solid rgba(255, 255, 255, 0.2);box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);transform: translateY(-20px);animation: fadeIn 1.5s ease-out forwards;
}@keyframes fadeIn {from { opacity: 0; transform: translateY(20px); }to { opacity: 1; transform: translateY(0); }
}h1 {font-size: 2.5em;margin-bottom: 30px;color: #f8e58c;letter-spacing: 5px;
}.poem {font-size: 1.8em;line-height: 2.5em;letter-spacing: 2px;
}.author {font-size: 1.5em;margin-top: 30px;font-style: italic;color: #ccc;
}

3.3 控制按钮样式

.controls {margin-top: 30px;display: flex;justify-content: center;gap: 15px;
}button {background: rgba(255, 255, 255, 0.2);border: none;color: white;padding: 12px 24px;border-radius: 50px;cursor: pointer;font-family: inherit;font-size: 1em;transition: all 0.3s;min-width: 120px;backdrop-filter: blur(10px);border: 1px solid rgba(255, 255, 255, 0.1);
}button:hover {background: rgba(255, 255, 255, 0.3);transform: translateY(-2px);
}button:active {transform: translateY(1px);
}

四、JavaScript交互实现

4.1 基础控制逻辑

// 获取DOM元素
const bgMusic = document.getElementById('bg-music');
const musicBtn = document.getElementById('music-btn');
const muteBtn = document.getElementById('mute-btn');
const videoBg = document.getElementById('video-background');// 初始化状态
let isMusicPlaying = false;
let isMuted = true;// 音乐播放控制
musicBtn.addEventListener('click', function() {if (isMusicPlaying) {bgMusic.pause();musicBtn.textContent = '播放音乐';} else {// 尝试播放音乐const playPromise = bgMusic.play();if (playPromise !== undefined) {playPromise.then(_ => {isMusicPlaying = true;musicBtn.textContent = '暂停音乐';}).catch(error => {console.log('播放失败:', error);alert('请先取消静音后再播放音乐');});}}isMusicPlaying = !isMusicPlaying;
});// 静音控制
muteBtn.addEventListener('click', function() {isMuted = !isMuted;bgMusic.muted = isMuted;videoBg.muted = isMuted;muteBtn.textContent = isMuted ? '取消静音' : '静音';
});

4.2 处理浏览器自动播放策略

现代浏览器为防止滥用,限制了自动播放功能。我们的解决方案:

// 初始化设置
function initMedia() {// 视频默认静音自动播放videoBg.muted = true;videoBg.play().catch(e => {console.log('视频自动播放被阻止:', e);showFallbackImage();});// 音乐默认静音bgMusic.muted = true;// 用户首次交互后尝试取消静音document.addEventListener('click', function firstInteraction() {// 尝试取消视频静音videoBg.muted = false;// 移除事件监听document.removeEventListener('click', firstInteraction);}, { once: true });
}// 显示备用图片
function showFallbackImage() {const fallback = document.createElement('img');fallback.src = 'assets/fallback-image.jpg';fallback.className = 'fallback-image';fallback.alt = '田园风光';document.body.appendChild(fallback);
}// 页面加载完成后初始化
window.addEventListener('DOMContentLoaded', initMedia);

4.3 增强用户体验

// 添加加载状态指示
const loadingIndicator = document.createElement('div');
loadingIndicator.className = 'loading-indicator';
document.body.appendChild(loadingIndicator);// 检查所有媒体加载状态
Promise.all([new Promise(resolve => {videoBg.addEventListener('loadeddata', resolve);videoBg.addEventListener('error', resolve);}),new Promise(resolve => {bgMusic.addEventListener('canplaythrough', resolve);bgMusic.addEventListener('error', resolve);})
]).then(() => {// 所有媒体加载完成后移除加载指示loadingIndicator.style.opacity = '0';setTimeout(() => {loadingIndicator.remove();}, 500);
});// 添加键盘快捷键
document.addEventListener('keydown', (e) => {if (e.code === 'Space') {e.preventDefault();musicBtn.click();} else if (e.code === 'KeyM') {muteBtn.click();}
});

五、解决常见问题与优化

5.1 浏览器兼容性问题解决方案

  1. 视频无法自动播放

    • 确保视频是静音的(muted属性)
    • 添加playsinline属性以兼容iOS
    • 提供备用图片
  2. 音频播放限制

    • 必须在用户交互后才能播放声音
    • 清晰的UI提示引导用户操作
  3. 旧版浏览器支持

    • 使用特性检测提供降级方案
    • 添加必要的polyfill

5.2 性能优化

// 延迟加载非关键资源
window.addEventListener('load', function() {// 预加载可能用到的其他资源const preloads = [{ href: 'assets/fallback-image.jpg', as: 'image' },{ href: 'assets/audio-waveform.png', as: 'image' }];preloads.forEach(item => {const link = document.createElement('link');link.rel = 'preload';link.href = item.href;link.as = item.as;document.head.appendChild(link);});
});// 视频自适应质量
function adjustVideoQuality() {const connection = navigator.connection;if (connection) {const effectiveType = connection.effectiveType;if (effectiveType === 'slow-2g' || effectiveType === '2g') {videoBg.src = 'assets/farmland-low.mp4';}}
}

5.3 响应式设计调整

/* 平板设备样式调整 */
@media (max-width: 768px) {.poem-container {padding: 30px;max-width: 85%;}h1 {font-size: 2em;}.poem {font-size: 1.5em;line-height: 2em;}
}/* 手机设备样式调整 */
@media (max-width: 480px) {.poem-container {padding: 20px;max-width: 90%;}h1 {font-size: 1.8em;margin-bottom: 20px;}.poem {font-size: 1.3em;line-height: 1.8em;}.controls {flex-direction: column;gap: 10px;}button {width: 100%;}
}

六、完整代码整合

以下是整合所有优化的完整代码:

<!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 href="https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&display=swap" rel="stylesheet"><style>body {margin: 0;padding: 0;height: 100vh;display: flex;justify-content: center;align-items: center;font-family: "楷体", "STKaiti", "Ma Shan Zheng", serif;overflow: hidden;color: #fff;text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);background-color: #222;}#video-background {position: fixed;right: 0;bottom: 0;min-width: 100%;min-height: 100%;z-index: -1;object-fit: cover;transition: opacity 1s;}.fallback-image {position: fixed;width: 100%;height: 100%;object-fit: cover;z-index: -2;display: none;}.poem-container {background-color: rgba(0, 0, 0, 0.6);padding: 40px;border-radius: 10px;max-width: 600px;text-align: center;backdrop-filter: blur(5px);border: 1px solid rgba(255, 255, 255, 0.2);box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);transform: translateY(-20px);animation: fadeIn 1.5s ease-out forwards;margin: 20px;}@keyframes fadeIn {from { opacity: 0; transform: translateY(20px); }to { opacity: 1; transform: translateY(0); }}h1 {font-size: 2.5em;margin-bottom: 30px;color: #f8e58c;letter-spacing: 5px;}.poem {font-size: 1.8em;line-height: 2.5em;letter-spacing: 2px;}.author {font-size: 1.5em;margin-top: 30px;font-style: italic;color: #ccc;}.controls {margin-top: 30px;display: flex;justify-content: center;gap: 15px;}button {background: rgba(255, 255, 255, 0.2);border: none;color: white;padding: 12px 24px;border-radius: 50px;cursor: pointer;font-family: inherit;font-size: 1em;transition: all 0.3s;min-width: 120px;backdrop-filter: blur(10px);border: 1px solid rgba(255, 255, 255, 0.1);}button:hover {background: rgba(255, 255, 255, 0.3);transform: translateY(-2px);}button:active {transform: translateY(1px);}.loading-indicator {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0, 0, 0, 0.7);display: flex;justify-content: center;align-items: center;z-index: 100;transition: opacity 0.5s;}.loading-indicator::after {content: "加载中...";color: white;font-size: 1.5em;}@media (max-width: 768px) {.poem-container {padding: 30px;max-width: 85%;}h1 {font-size: 2em;}.poem {font-size: 1.5em;line-height: 2em;}}@media (max-width: 480px) {.poem-container {padding: 20px;max-width: 90%;}h1 {font-size: 1.8em;margin-bottom: 20px;}.poem {font-size: 1.3em;line-height: 1.8em;}.controls {flex-direction: column;gap: 10px;}button {width: 100%;}}</style>
</head>
<body><!-- 视频背景 --><video autoplay muted loop playsinline id="video-background"><source src="assets/farmland.mp4" type="video/mp4"><img src="assets/fallback-image.jpg" class="fallback-image" alt="田园风光"></video><!-- 古诗内容容器 --><div class="poem-container"><h1>悯农</h1><div class="poem"><p>锄禾日当午,汗滴禾下土。</p><p>谁知盘中餐,粒粒皆辛苦。</p></div><div class="author">—— 李绅</div><!-- 控制按钮 --><div class="controls"><button id="music-btn">播放音乐</button><button id="mute-btn">取消静音</button></div></div><!-- 背景音乐 --><audio id="bg-music" loop><source src="assets/chinese-garden.mp3" type="audio/mpeg"></audio><!-- 加载指示器 --><div class="loading-indicator"></div><script>// 获取DOM元素const bgMusic = document.getElementById('bg-music');const musicBtn = document.getElementById('music-btn');const muteBtn = document.getElementById('mute-btn');const videoBg = document.getElementById('video-background');const loadingIndicator = document.querySelector('.loading-indicator');// 初始化状态let isMusicPlaying = false;let isMuted = true;// 初始化媒体function initMedia() {// 视频默认静音自动播放videoBg.muted = true;const videoPromise = videoBg.play().catch(e => {console.log('视频自动播放被阻止:', e);showFallbackImage();});// 音乐默认静音bgMusic.muted = true;// 用户首次交互后尝试取消静音document.addEventListener('click', function firstInteraction() {// 尝试取消视频静音videoBg.muted = false;// 移除事件监听document.removeEventListener('click', firstInteraction);}, { once: true });return Promise.all([videoPromise]);}// 显示备用图片function showFallbackImage() {const fallback = document.querySelector('.fallback-image');if (fallback) {fallback.style.display = 'block';videoBg.style.display = 'none';}}// 音乐播放控制musicBtn.addEventListener('click', function() {if (isMusicPlaying) {bgMusic.pause();musicBtn.textContent = '播放音乐';} else {// 尝试播放音乐const playPromise = bgMusic.play();if (playPromise !== undefined) {playPromise.then(_ => {isMusicPlaying = true;musicBtn.textContent = '暂停音乐';}).catch(error => {console.log('播放失败:', error);alert('请先取消静音后再播放音乐');});}}isMusicPlaying = !isMusicPlaying;});// 静音控制muteBtn.addEventListener('click', function() {isMuted = !isMuted;bgMusic.muted = isMuted;videoBg.muted = isMuted;muteBtn.textContent = isMuted ? '取消静音' : '静音';// 如果取消静音且音乐未播放,尝试播放if (!isMuted && !isMusicPlaying) {bgMusic.play().then(() => {isMusicPlaying = true;musicBtn.textContent = '暂停音乐';}).catch(e => {console.log('播放失败:', e);});}});// 添加键盘快捷键document.addEventListener('keydown', (e) => {if (e.code === 'Space') {e.preventDefault();musicBtn.click();} else if (e.code === 'KeyM') {muteBtn.click();}});// 页面加载完成后初始化window.addEventListener('DOMContentLoaded', () => {initMedia().finally(() => {// 所有媒体加载完成后移除加载指示loadingIndicator.style.opacity = '0';setTimeout(() => {loadingIndicator.remove();}, 500);});});</script>
</body>
</html>

七、扩展思路与未来改进

7.1 可能的扩展功能

  1. 多首诗作切换:创建诗集浏览功能
  2. 主题切换:不同季节或时间的背景主题
  3. 朗诵功能:添加诗歌朗诵音频
  4. 注释功能:点击诗句显示详细注释

7.2 性能进一步提升

  1. 视频懒加载:只在视口内时加载视频
  2. 自适应比特率:根据网络状况切换视频质量
  3. Web Worker:使用Worker处理媒体解码

7.3 无障碍访问改进

  1. ARIA属性:为控件添加适当的ARIA标签
  2. 高对比度模式:为视力障碍用户提供高对比度选项
  3. 文字大小调整:添加字体大小控制按钮

结语

通过本文的详细介绍,我们完成了一个融合传统古诗与现代Web技术的沉浸式体验页面。从基础结构到高级交互,从样式设计到性能优化,每个环节都体现了"以用户为中心"的设计理念。希望这个项目能为您提供灵感,创造出更多优秀的文化传播作品。

传统文化与现代技术的结合有着无限可能,期待您能在此基础上继续探索,让更多经典作品以崭新的形式焕发生机。


http://www.hkcw.cn/article/SWWsROAHJU.shtml

相关文章

Python - 爬虫;Scrapy框架之插件Extensions(四)

阅读本文前先参考 https://blog.csdn.net/MinggeQingchun/article/details/145904572 在 Scrapy 中&#xff0c;扩展&#xff08;Extensions&#xff09;是一种插件&#xff0c;允许你添加额外的功能到你的爬虫项目中。这些扩展可以在项目的不同阶段执行&#xff0c;比如启动…

vscode 连接远程服务器

文章目录 1. 背景2. vscode 连接 服务器步骤2.1 安装 remote-ssh 插件2.2 配置 ssh 秘钥2.3 连接 server vscode 连接远程服务器 1. 背景 有服务器的同学&#xff0c;或许都有这样的感觉&#xff0c;服务器是 linux 系统&#xff0c;且只给个人提供一个终端进行连接&#xff0c…

JavaScript 模块系统:CJS/AMD/UMD/ESM

文章目录 前言一、CommonJS (CJS) - Node.js 的同步模块系统1.1 设计背景1.2 浏览器兼容性问题1.3 Webpack 如何转换 CJS1.4 适用场景 二、AMD (Asynchronous Module Definition) - 浏览器异步加载方案2.1 设计背景2.2 为什么现代浏览器不原生支持 AMD2.3 Webpack/Rollup 如何处…

乌称摧毁34%俄远程机队 俄媒否认 谎言蛛网行动

俄罗斯“与假新闻作战”网站发布文章称,通过分析乌克兰方面发布的视频可以确认,乌总统泽连斯基关于“已摧毁34%俄罗斯远程机队”的说法并不属实。俄方认为,乌克兰实际上可能仅摧毁了两架图-95战略轰炸机及一架安-12运输机,其余受损飞机在维修后均可恢复作战能力。乌克兰国家…

加沙停火协议为何一波三折 美斡旋遇阻

本周,美国就巴勒斯坦伊斯兰抵抗运动(哈马斯)和以色列的停火展开斡旋,提出一项为期60天的加沙地带停火方案。然而,围绕是否接受这份方案,哈马斯和以色列的态度不一,谈判频频出现变数。美国白宫5月29日表示,以色列已接受并签署美国提出的加沙地带临时停火方案。但该方案在…

基于springboot的宠物领养系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

中国王朝简史

文章目录 一、先秦时期&#xff1a;文明起点与制度雏形夏&#xff08;约前2070年–前1600年&#xff09;商&#xff08;约前1600年–前1046年&#xff09;周&#xff08;前1046年–前256年&#xff09; 二、大一统帝国的试验与成熟秦&#xff08;前221年–前207年&#xff09;汉…

Freefilesync配置windows与windows,windows与linux之间同步

说明 Freefilesync&#xff1a;用于windows与windows&#xff0c;windows与linux之间同步 linux 之间同步&#xff0c;使用系统的自带的 corn 软件&#xff0c;执行 sync 命名的脚本即可 一 、下载Freefilesync windows服务器上打开官网 https://freefilesync.org/&#xff0…

数字创新智慧园区建设及运维方案

该文档是 “数字创新智慧园区” 建设及运维方案,指出传统产业园区存在管理粗放等问题,“数字创新园区” 通过大数据、AI、物联网、云计算等数字化技术,旨在提升园区产业服务、运营管理水平,增强竞争力,实现绿色节能、高效管理等目标。建设内容包括智能设施、核心支撑平台、…

P1541 [NOIP 2010 提高组] 乌龟棋

P1541 [NOIP 2010 提高组] 乌龟棋 - 洛谷 题目背景 NOIP2010 提高组 T2 题目描述 小明过生日的时候&#xff0c;爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行 N 个格子&#xff0c;每个格子上一个分数&#xff08;非负整数&#xff09;。棋盘第 1 格是唯一的起点&a…

设计模式——享元设计模式(结构型)

摘要 享元设计模式是一种结构型设计模式&#xff0c;旨在通过共享对象减少内存占用和提升性能。其核心思想是将对象状态分为内部状态&#xff08;可共享&#xff09;和外部状态&#xff08;不可共享&#xff09;&#xff0c;并通过享元工厂管理共享对象池。享元模式包含抽象享…

Qt OpenGL编程常用类

Qt提供了丰富的类来支持OpenGL编程&#xff0c;以下是常用的Qt OpenGL相关类&#xff1a; 一、QOpenGLWidget 功能&#xff1a;用于在 Qt 应用程序中嵌入 OpenGL 渲染的窗口部件。替代了旧版的QGLWidget。提供了OpenGL上下文和渲染表面。 继承关系&#xff1a;QWidget → QOp…

【JMeter】性能测试知识和工具

目录 何为系统性能 何为性能测试 性能测试分类 性能测试指标 性能测试流程 性能测试工具&#xff1a;JMeter&#xff08;主测web应用&#xff09; jmeter文件目录 启动方式 基本元件&#xff1a;元件内有很多组件 jmeter参数化 jmeter关联 自动录制脚本 直连数据库…

[Linux] nginx源码编译安装

初次学习&#xff0c;如有错误欢迎指正 目录 环境包部署 创建程序用户 软件包压缩 配置 编译 安装 建立快捷启动 启动nginx&#xff1f; 防火墙管理 查看规则 清空规则 关闭服务 开启服务 查看状态 开机自启 开机禁用 查看开机启动状态 nginx&#xff0c;启…

Spring AI Image Model、TTS,RAG

文章目录 Spring AI Alibaba聊天模型图像模型Image Model API接口及相关类实现生成图像 语音模型Text-to-Speech API概述实现文本转语音 实现RAG向量化RAGRAG工作流程概述实现基本 RAG 流程 Spring AI Alibaba Spring AI Alibaba实现了与阿里云通义模型的完整适配&#xff0c;…

多地机关食堂端午假期向社会开放 特色套餐迎客来

端午假期期间,全国多地政府机关食堂面向社会公众开放。5月31日中午,荣昌区政府机关食堂如约向游客开放,首日第一餐吸引了超过3000名游客前来体验。荣昌区特别推出了61元的“六一”家庭套餐,包含荣昌卤鹅、猪油泡粑、黄凉粉等特色菜品,还新增了粽子和儿童喜欢的薯条、鸡腿、…

韩国大选“5选1”投票将启 三强格局形成

6月3日,韩国将迎来新一届总统选举。最初有7名候选人登记参选,但截至6月2日,已有两名候选人宣布退出,形成了“5选1”的局面。目前李在明、金文洙和李俊锡基本形成三强格局。4名韩国前总统也各自进行着“路演”,通过各种方式表达对各自阵营候选人的支持。尹锡悦5月31日表态支…

美联邦调查局称科罗拉多州发生恐袭 燃烧瓶袭击游行人群

美国联邦调查局(FBI)局长卡什帕特尔在社交媒体上表示,6月1日科罗拉多州博尔德市发生了一起有针对性的恐怖袭击事件。FBI正在对此进行全面调查。FBI特工和当地执法人员已到达案发现场,并将在获得更多信息后分享最新情况。同日下午,科罗拉多州博尔德市的一个购物中心发生了袭…

第二轮谈判 乌公布代表团14人名单 防长继续带队

俄罗斯代表团已抵达土耳其伊斯坦布尔,准备参加即将举行的俄乌谈判。俄谈判代表团团长梅金斯基在抵达后表示,关于乌克兰谈判的所有评论将在6月2日公布,并会在当天详细说明俄罗斯在乌克兰问题上的立场。对于乌克兰对俄罗斯境内目标可能发起的攻击及其影响,俄方代表团成员、俄…

MQTT入门实战宝典:从零起步掌握物联网核心通信协议

MQTT入门实战宝典&#xff1a;从零起步掌握物联网核心通信协议 前言 物联网时代&#xff0c;万物互联已成为现实&#xff0c;而MQTT协议作为这个时代的"数据总线"&#xff0c;正默默支撑着从智能家居到工业物联的各类应用场景。本文将带你揭开MQTT的神秘面纱&#…