From 4da69ec097169303db1ac48b4e008320ddbce55d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?=
<你的邮箱@example.com>
Date: Wed, 16 Jul 2025 14:14:10 +0800
Subject: [PATCH] first commit
---
index.html | 51 +++++++++++++++
script.js | 59 +++++++++++++++++
style.css | 188 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 298 insertions(+)
create mode 100644 index.html
create mode 100644 script.js
create mode 100644 style.css
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..3b25b15
--- /dev/null
+++ b/index.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+ Voice Assistant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..7b204e8
--- /dev/null
+++ b/script.js
@@ -0,0 +1,59 @@
+document.addEventListener('DOMContentLoaded', function() {
+
+ // 获取需要的 DOM 元素
+ const videoUploadInput = document.getElementById('video-upload');
+ const bgVideo = document.getElementById('bg-video');
+ const videoSource = document.getElementById('video-source');
+ const micButton = document.getElementById('mic-button');
+ const favorabilityBar = document.getElementById('favorability-bar');
+
+ // --- 视频上传功能 ---
+ videoUploadInput.addEventListener('change', function(event) {
+ const file = event.target.files[0];
+
+ if (file) {
+ // 使用 URL.createObjectURL 为用户选择的本地文件创建一个临时的 URL
+ const fileURL = URL.createObjectURL(file);
+
+ // 设置 video 元素的 source
+ videoSource.setAttribute('src', fileURL);
+
+ // 加载并播放新的视频
+ bgVideo.load();
+ bgVideo.play().catch(error => {
+ // 某些浏览器可能会阻止自动播放,这是一种友好的处理方式
+ console.error("Video play failed:", error);
+ });
+ }
+ });
+
+ // --- 麦克风按钮交互和好感度条模拟 ---
+ let isListening = false;
+ let currentFavorability = 65; // 与 CSS 中的初始宽度保持一致
+
+ micButton.addEventListener('click', function() {
+ isListening = !isListening;
+
+ // 切换 "监听中" 的样式 (动画)
+ micButton.classList.toggle('is-listening', isListening);
+
+ // 模拟交互:每次点击麦克风,好感度增加
+ if (isListening) {
+ // 增加好感度,但最高不超过 100
+ currentFavorability += 5;
+ if (currentFavorability > 100) {
+ currentFavorability = 100;
+ }
+ } else {
+ // 如果停止监听,可以稍微降低一点好感度(可选)
+ currentFavorability -= 2;
+ if (currentFavorability < 0) {
+ currentFavorability = 0;
+ }
+ }
+
+ // 更新好感度进度条的宽度
+ favorabilityBar.style.width = currentFavorability + '%';
+ });
+
+});
\ No newline at end of file
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..b488c8f
--- /dev/null
+++ b/style.css
@@ -0,0 +1,188 @@
+/* --- 基本重置和全局样式 --- */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+html, body {
+ height: 100%;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
+ color: white;
+ overflow: hidden; /* 防止视频导致滚动条 */
+}
+
+/* --- 视频背景 --- */
+#bg-video {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ min-width: 100%;
+ min-height: 100%;
+ width: auto;
+ height: auto;
+ transform: translateX(-50%) translateY(-50%);
+ z-index: -1; /* 将视频置于最底层 */
+ object-fit: cover; /* 关键:让视频填满整个屏幕而不变形 */
+ background-color: #1a1a1a; /* 视频加载前的背景色 */
+}
+
+/* --- 内容覆盖层 --- */
+.content-overlay {
+ position: relative;
+ height: 100vh;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between; /* 顶部和底部分别对齐 */
+ align-items: center;
+ padding: 25px;
+ background-color: rgba(0, 0, 0, 0.35); /* 半透明黑色蒙版,确保文字清晰可见 */
+ z-index: 1;
+}
+
+/* --- 顶部好感度条 --- */
+.top-bar {
+ width: 100%;
+ max-width: 500px;
+ text-align: left;
+}
+
+.top-bar label {
+ font-size: 1rem;
+ font-weight: 600;
+ text-shadow: 1px 1px 3px rgba(0,0,0,0.5);
+ margin-bottom: 8px;
+ display: block;
+}
+
+.progress-container {
+ width: 100%;
+ height: 12px;
+ background-color: rgba(255, 255, 255, 0.3);
+ border-radius: 10px;
+ overflow: hidden;
+}
+
+.progress-fill {
+ height: 100%;
+ width: 65%; /* 初始好感度值 */
+ background: linear-gradient(90deg, #4facfe, #00f2fe);
+ border-radius: 10px;
+ transition: width 0.5s ease-in-out;
+}
+
+/* --- 中间内容 (上传按钮) --- */
+.center-content {
+ /* 这个区域是弹性填充的,所以不需要太多样式 */
+}
+
+.upload-button {
+ background-color: rgba(255, 255, 255, 0.2);
+ border: 1px solid rgba(255, 255, 255, 0.5);
+ padding: 8px 16px;
+ border-radius: 20px;
+ cursor: pointer;
+ font-size: 0.9rem;
+ transition: background-color 0.3s ease;
+}
+
+.upload-button:hover {
+ background-color: rgba(255, 255, 255, 0.4);
+}
+
+/* --- 底部内容 --- */
+.bottom-bar {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.mic-button {
+ width: 80px;
+ height: 80px;
+ background: linear-gradient(45deg, #ff5f6d, #ffc371);
+ border: none;
+ border-radius: 50%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
+}
+
+.mic-button:hover {
+ transform: scale(1.1);
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.4);
+}
+
+.mic-button:active {
+ transform: scale(1.05);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
+}
+
+.mic-button i {
+ font-size: 36px;
+ color: white;
+}
+
+/* 麦克风 "监听中" 的动画效果 */
+.mic-button.is-listening {
+ animation: pulse 1.5s infinite;
+}
+
+@keyframes pulse {
+ 0% {
+ box-shadow: 0 0 0 0 rgba(255, 95, 109, 0.7);
+ }
+ 70% {
+ box-shadow: 0 0 0 20px rgba(255, 95, 109, 0);
+ }
+ 100% {
+ box-shadow: 0 0 0 0 rgba(255, 95, 109, 0);
+ }
+}
+
+.footer-credit {
+ margin-top: 20px;
+ color: rgba(255, 255, 255, 0.8);
+ text-decoration: none;
+ font-size: 1rem;
+ transition: color 0.3s ease;
+}
+
+.footer-credit:hover {
+ color: white;
+ text-decoration: underline;
+}
+
+/* --- 响应式设计 --- */
+@media (max-width: 600px) {
+ .content-overlay {
+ padding: 20px;
+ }
+
+ .top-bar label {
+ font-size: 0.9rem;
+ }
+
+ .progress-container {
+ height: 10px;
+ }
+
+ .mic-button {
+ width: 70px;
+ height: 70px;
+ }
+
+ .mic-button i {
+ font-size: 30px;
+ }
+
+ .footer-credit {
+ margin-top: 15px;
+ font-size: 0.9rem;
+ }
+}
\ No newline at end of file