Vue3百度风格搜索框组件,使用vue3进行设计,亦有vue3+TS的版本。
vue3组件如下:

<template><!-- 搜索组件容器 --><div class="search-container"><!-- 百度Logo - 新样式 --><div class="logo-container"><h1 class="logo"><span class="logo-bai">qiandu</span><span class="logo-baidu">千度</span></h1><p class="search-hint">搜索一下,你可能也不知道呀</p></div><!-- 搜索框主体 --><div class="search-box" ref="searchBox"><!-- 输入框容器 --><div class="search-input-container"><!-- 核心搜索输入框:v-model绑定query实现双向数据绑定@input监听输入事件触发搜索建议@keydown监听键盘事件实现导航@focus获取焦点时显示建议列表--><inputtype="text"v-model="query"@input="handleInput"@keydown.down="onArrowDown"@keydown.up="onArrowUp"@keydown.enter="onEnter"@focus="showSuggestions = true"placeholder="请输入搜索关键词"class="search-input"/><!-- 清空按钮 - 仅在输入框有内容时显示 --><button v-if="query" @click="clearInput" class="clear-btn"><i class="fas fa-times"></i></button></div><!-- 搜索按钮 --><button @click="search" class="search-btn"><div class="camera-icon"></div><!-- <span class="soutu-btn"></span> --><i class="fas fa-search">search it!</i></button></div><!-- 搜索建议列表 --><div v-if="showSuggestions && suggestions.length > 0" class="suggestions"><!-- 遍历建议列表:点击建议项时触发搜索:class绑定active类实现键盘导航高亮 --><div v-for="(suggestion, index) in suggestions" :key="index"@click="selectSuggestion(suggestion)":class="['suggestion-item', { active: index === activeSuggestionIndex }]"><i class="fas fa-search suggestion-icon"></i><span>{{ suggestion }}</span></div></div><!-- 搜索历史记录 --><div v-if="showHistory && searchHistory.length > 0" class="history"><!-- 历史记录标题和清空按钮 --><div class="history-header"><span>搜索历史</span><button @click="clearHistory" class="clear-history-btn"><i class="fas fa-trash-alt"></i> 清空</button></div><!-- 遍历历史记录 --><div v-for="(item, index) in searchHistory" :key="index"@click="selectHistory(item)"class="history-item"><i class="fas fa-history history-icon"></i><span>{{ item }}</span></div></div></div>
</template><script setup>
// Vue Composition API 引入
import { ref, computed, onMounted, onUnmounted } from 'vue';// 响应式数据定义
const query = ref(''); // 搜索关键词
const suggestions = ref([]); // 搜索建议列表
const showSuggestions = ref(false); // 是否显示建议列表
const activeSuggestionIndex = ref(-1); // 当前激活的建议项索引
const searchHistory = ref([]); // 搜索历史记录
const showHistory = ref(true); // 是否显示历史记录
const searchBox = ref(null); // 搜索框DOM引用// 模拟的搜索建议数据(实际应用中应替换为API请求)
const mockSuggestions = ["vue3教程","vue3中文文档","vue3生命周期","vue3 composition api","vue3 vs vue2","vue3项目实战","vue3组件开发","vue3响应式原理","vue3路由配置","vue3状态管理"
];/*** 处理输入事件 - 当用户在搜索框中输入时触发*/
const handleInput = () => {// 如果搜索框为空,重置建议列表并显示历史记录if (!query.value) {suggestions.value = [];showSuggestions.value = false;showHistory.value = true;return;}// 模拟API请求 - 实际应用中这里应该发送请求到后端setTimeout(() => {// 过滤出包含搜索关键词的建议项(不区分大小写)suggestions.value = mockSuggestions.filter(item => item.toLowerCase().includes(query.value.toLowerCase()));// 显示建议列表showSuggestions.value = true;// 隐藏历史记录showHistory.value = false;// 重置激活建议项索引activeSuggestionIndex.value = -1;}, 200); // 200ms延迟模拟网络请求
};/*** 清空输入框内容*/
const clearInput = () => {query.value = '';suggestions.value = [];showSuggestions.value = false;showHistory.value = true;
};/*** 执行搜索操作*/
const search = () => {// 如果搜索内容为空则返回if (!query.value.trim()) return;// 添加到历史记录(避免重复)if (!searchHistory.value.includes(query.value)) {// 将新搜索词添加到历史记录开头searchHistory.value.unshift(query.value);// 最多保留10条历史记录if (searchHistory.value.length > 10) {searchHistory.value.pop();}// 将历史记录保存到localStoragelocalStorage.setItem('searchHistory', JSON.stringify(searchHistory.value));}// 在实际应用中这里应该执行真正的搜索操作// 这里使用alert模拟搜索结果alert(`搜索: ${query.value}`);// 隐藏建议列表showSuggestions.value = false;
};/*** 选择搜索建议项* @param {string} suggestion - 选择的建议项*/
const selectSuggestion = (suggestion) => {// 将建议项内容填充到搜索框query.value = suggestion;// 执行搜索search();
};/*** 选择历史记录项* @param {string} item - 选择的历史记录项*/
const selectHistory = (item) => {// 将历史记录内容填充到搜索框query.value = item;// 执行搜索search();
};/*** 清空历史记录*/
const clearHistory = () => {// 清空历史记录数组searchHistory.value = [];// 从localStorage中移除历史记录localStorage.removeItem('searchHistory');
};/*** 键盘向下箭头事件处理* 用于在建议列表中向下导航*/
const onArrowDown = () => {if (activeSuggestionIndex.value < suggestions.value.length - 1) {activeSuggestionIndex.value++;}
};/*** 键盘向上箭头事件处理* 用于在建议列表中向上导航*/
const onArrowUp = () => {if (activeSuggestionIndex.value > 0) {activeSuggestionIndex.value--;}
};/*** 键盘回车事件处理* 用于执行搜索或选择当前建议项*/
const onEnter = () => {// 如果有激活的建议项,使用该建议项进行搜索if (activeSuggestionIndex.value >= 0 && suggestions.value.length > 0) {query.value = suggestions.value[activeSuggestionIndex.value];}// 执行搜索search();
};/*** 点击外部区域关闭建议列表* @param {Event} event - 点击事件对象*/
const handleClickOutside = (event) => {// 如果点击发生在搜索框外部,则关闭建议列表if (searchBox.value && !searchBox.value.contains(event.target)) {showSuggestions.value = false;}
};/*** 组件挂载生命周期钩子*/
onMounted(() => {// 从localStorage加载历史记录const savedHistory = localStorage.getItem('searchHistory');if (savedHistory) {searchHistory.value = JSON.parse(savedHistory);}// 添加全局点击事件监听器document.addEventListener('click', handleClickOutside);
});/*** 组件卸载生命周期钩子*/
onUnmounted(() => {// 移除全局点击事件监听器document.removeEventListener('click', handleClickOutside);
});
</script><style scoped>
.logo-container {text-align: center;margin-bottom: 20px;width: 100%;padding-top: 40px;
}.logo {display: flex;justify-content: center;align-items: flex-end;margin-bottom: 8px;height: 48px;
}.logo-bai {font-family: Arial, sans-serif;color: #000;font-size: 48px;font-weight: 600;letter-spacing: -1px;line-height: 0.8;padding-right: 3px;position: relative;top: -2px;
}.logo-baidu {font-family: "PingFang SC", "Microsoft YaHei", sans-serif;color: #3385ff;font-size: 44px;font-weight: 700;line-height: 1;letter-spacing: -1px;
}.slogan {font-size: 16px;color: #666;margin-bottom: 15px;font-weight: 400;line-height: 1.5;
}.search-hint {font-size: 18px;color: #3385ff;font-weight: bold;letter-spacing: 1px;position: relative;
}.search-hint::after {content: "";position: absolute;bottom: -5px;left: 50%;transform: translateX(-50%);width: 85px;height: 3px;background: linear-gradient(90deg, transparent, #3385ff, transparent);border-radius: 2px;
}/* 搜索组件容器样式 */
.search-container {display: flex;flex-direction: column;align-items: center;max-width: 800px;width: 100%;margin: 0 auto;padding: 20px;/* 渐变背景 */background: linear-gradient(180deg, #f1f1f1 0%, #f8f9fa 100px);min-height: 100vh;
}/* Logo容器样式 */
.logo-container {margin-bottom: 30px;
}/* Logo文字样式 */
.logo {font-size: 60px;font-weight: 700;letter-spacing: -4px;margin-bottom: 10px;/* 使用中文字体 */font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
}/* 搜索框整体样式 */
.search-box {display: flex;width: 100%;max-width: 600px;height: 50px;border: 2px solid #3385ff; /* 百度蓝边框 */border-radius: 10px;overflow: hidden;box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 轻微阴影 */background: white;
}/* 输入框容器样式 */
.search-input-container {flex: 1;position: relative;display: flex;align-items: center;
}/* 输入框样式 */
.search-input {width: 100%;height: 100%;padding: 0 20px;border: none;outline: none;font-size: 16px;color: #333;
}/* 清空按钮样式 */
.clear-btn {position: absolute;right: 15px;background: none;border: none;color: #999;cursor: pointer;font-size: 16px;transition: color 0.2s; /* 颜色过渡效果 */
}/* 清空按钮悬停效果 */
.clear-btn:hover {color: #333;
}/* 搜索按钮样式 */
.search-btn {width: 100px;background: #3385ff; /* 百度蓝 */color: white;border: none;font-size: 16px;cursor: pointer;transition: background 0.3s; /* 背景色过渡效果 */
}/* 搜索按钮悬停效果 */
.search-btn:hover {background: #2a75e6; /* 深一点的蓝色 */
}/* 建议列表和历史记录容器样式 */
.suggestions, .history {width: 100%;max-width: 600px;margin-top: 5px;background: white;border-radius: 8px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); /* 阴影效果 */overflow: hidden;
}/* 建议项和历史项通用样式 */
.suggestion-item, .history-item {padding: 12px 20px;display: flex;align-items: center;cursor: pointer;transition: background 0.2s; /* 背景色过渡效果 */
}/* 建议项悬停和激活状态样式 */
.suggestion-item:hover, .suggestion-item.active {background: #f5f7fa; /* 浅蓝色背景 */
}/* 历史项悬停效果 */
.history-item:hover {background: #f5f7fa;
}/* 图标样式 */
.suggestion-icon, .history-icon {margin-right: 15px;color: #999; /* 灰色图标 */font-size: 14px;
}/* 历史记录头部样式 */
.history-header {display: flex;justify-content: space-between;align-items: center;padding: 12px 20px;border-bottom: 1px solid #eee; /* 底部边框 */font-size: 14px;color: #666;
}/* 清空历史按钮样式 */
.clear-history-btn {background: none;border: none;color: #3385ff; /* 百度蓝 */cursor: pointer;font-size: 13px;display: flex;align-items: center;gap: 5px;
}/* 清空历史按钮悬停效果 */
.clear-history-btn:hover {text-decoration: underline; /* 下划线效果 */
}.soutu-btn {float: left;width: 20px;height: 20px;background: #fff url(https://www.baidu.com/img/soutu.png) no-repeat;background-size: contain;margin-right: 10px;background-position: 0 -51px;right: 30px;z-index: 1;position: relative;
}.camera-icon {width: 20px;height: 16px;position: absolute;background: #333; /* 相机主体颜色 */border-radius: 3px; /* 圆角 */margin-left: -30px;/* 镜头部分 */&::before {content: "";position: absolute;width: 10px;height: 10px;background: #fff;border: 2px solid #333;border-radius: 50%;top: 50%;left: 50%;transform: translate(-50%, -50%);}/* 闪光灯部分 */&::after {content: "";position: absolute;width: 6px;height: 4px;background: #333;top: -3px;left: 50%;transform: translateX(-50%);border-radius: 2px 2px 0 0;box-shadow: 0 1px 0 rgba(255,255,255,0.1);}
}
</style>

typescript代码如下:

<script setup lang="ts">
// Vue Composition API 引入
import { ref, onMounted, onUnmounted, type Ref } from 'vue';// 类型定义
type Suggestion = string;
type SearchHistory = string[];// 响应式数据定义
const query: Ref<string> = ref(''); // 搜索关键词
const suggestions: Ref<Suggestion[]> = ref([]); // 搜索建议列表
const showSuggestions: Ref<boolean> = ref(false); // 是否显示建议列表
const activeSuggestionIndex: Ref<number> = ref(-1); // 当前激活的建议项索引
const searchHistory: Ref<SearchHistory> = ref([]); // 搜索历史记录
const showHistory: Ref<boolean> = ref(true); // 是否显示历史记录
const searchBox: Ref<HTMLElement | null> = ref(null); // 搜索框DOM引用// 模拟的搜索建议数据
const mockSuggestions: Suggestion[] = ["vue3教程","vue3中文文档","vue3生命周期","vue3 composition api","vue3 vs vue2","vue3项目实战","vue3组件开发","vue3响应式原理","vue3路由配置","vue3状态管理"
];/*** 处理输入事件 - 当用户在搜索框中输入时触发*/
const handleInput = (): void => {// 如果搜索框为空,重置建议列表并显示历史记录if (!query.value) {suggestions
.value = [];showSuggestions
.value = false;showHistory
.value = true;return;}// 模拟API请求setTimeout(() => {// 过滤出包含搜索关键词的建议项(不区分大小写)suggestions
.value = mockSuggestions.filter(item => item
.toLowerCase().includes(query.value.toLowerCase()));// 显示建议列表showSuggestions.value = true;// 隐藏历史记录showHistory.value = false;// 重置激活建议项索引activeSuggestionIndex.value = -1;}, 200); // 200ms延迟模拟网络请求
};/*** 清空输入框内容*/
const clearInput = (): void => {query.value = '';suggestions.value = [];showSuggestions.value = false;showHistory.value = true;
};/*** 执行搜索操作*/
const search = (): void => {// 如果搜索内容为空则返回if (!query.value.trim()) return;// 添加到历史记录(避免重复)if (!searchHistory.value.includes(query.value)) {// 将新搜索词添加到历史记录开头searchHistory.value.unshift(query.value);// 最多保留10条历史记录if (searchHistory.value.length > 10) {searchHistory.value.pop();}// 将历史记录保存到localStoragelocalStorage.setItem('searchHistory', JSON.stringify(searchHistory.value));}// 在实际应用中这里应该执行真正的搜索操作// 这里使用alert模拟搜索结果alert(`搜索: ${query.value}`);// 隐藏建议列表showSuggestions.value = false;
};/*** 选择搜索建议项* @param suggestion - 选择的建议项*/
const selectSuggestion = (suggestion: Suggestion): void => {// 将建议项内容填充到搜索框query.value = suggestion;// 执行搜索search();
};/*** 选择历史记录项* @param item - 选择的历史记录项*/
const selectHistory = (item: string): void => {// 将历史记录内容填充到搜索框query.value = item;// 执行搜索search();
};/*** 清空历史记录*/
const clearHistory = (): void => {// 清空历史记录数组searchHistory.value = [];// 从localStorage中移除历史记录localStorage
.removeItem('searchHistory');
};/*** 键盘向下箭头事件处理* 用于在建议列表中向下导航*/
const onArrowDown = (e: Event): void => {e
.preventDefault(); // 阻止默认行为if (activeSuggestionIndex.value < suggestions.value.length - 1) {activeSuggestionIndex.value++;}
};/*** 键盘向上箭头事件处理* 用于在建议列表中向上导航*/
const onArrowUp = (e: Event): void => {e
.preventDefault(); // 阻止默认行为if (activeSuggestionIndex.value > 0) {activeSuggestionIndex.value--;}
};/*** 键盘回车事件处理* 用于执行搜索或选择当前建议项*/
const onEnter = (): void => {// 如果有激活的建议项,使用该建议项进行搜索if (activeSuggestionIndex.value >= 0 && suggestions.value.length > 0) {query.value = suggestions.value[activeSuggestionIndex.value];}// 执行搜索search();
};/*** 点击外部区域关闭建议列表* @param event - 点击事件对象*/
const handleClickOutside = (event: MouseEvent): void => {// 如果点击发生在搜索框外部,则关闭建议列表if (searchBox.value && !searchBox.value.contains(event.target as Node)) {showSuggestions.value = false;}
};/*** 组件挂载生命周期钩子*/
onMounted((): void => {// 从localStorage加载历史记录const savedHistory: string | null = localStorage.getItem('searchHistory');if (savedHistory) {try {searchHistory.value = JSON.parse(savedHistory) as SearchHistory;} catch (error) {console
.error('Failed to parse search history:', error);// 清空无效历史记录localStorage.removeItem('searchHistory');searchHistory.value = [];}}// 添加全局点击事件监听器document.addEventListener('click', handleClickOutside);
});/*** 组件卸载生命周期钩子*/
onUnmounted((): void => {// 移除全局点击事件监听器document.removeEventListener('click', handleClickOutside);
});
</script>

若父组件使用script setup的形式,自动暴露了顶层变量,则无需在父组件中使用components声明引用子组件。
运行如图所示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智净未来:华为智选IAM以科技巧思优化家庭健康饮水体验

在中国家庭中&#xff0c;净水器早已成为厨房标配&#xff0c;但传统净水设备的使用体验却远未达到理想状态。根据《2023年中国家庭净水器使用调研报告》显示&#xff0c;超过65%的用户对传统净水器存在不满&#xff0c;主要痛点集中在功能单一、操作复杂、维护麻烦、噪音大、废…

细说STM32单片机SPI-Flash芯片的FatFS移植

目录 一、SPI-Flash芯片硬件电路 二、CubeMX项目基础设置 1、RCC、SYS、Code Generator、USART6、NVIC 2、RTC 3、SPI2 4、GPIO 5、FatFS模式 6、FatFS参数设置概述 &#xff08;1&#xff09;Version组 &#xff08;2&#xff09;Function Parameters组 1&#x…

ubuntu 22.04 安装部署logstash 7.10.0详细教程

安装部署logstash 7.10.0详细教程 一、下载并安装二、新建配置文件三、赋权文件权限四、检测文件grok语法是否异常五、启动服务六、安装启动常见问题 【背景】 整个elk安装是基于ubuntu 22.04和jdk 11环境。logstash采用 *.deb方式安装&#xff0c;需要服务器能联网。ubuntu 22…

JVM对象创建与内存分配机制深度剖析

对象创建的主要流程 类加载检查 在创建对象之前&#xff0c;JVM 首先会检查该类是否已经加载、解析并初始化&#xff1a; 如果没有&#xff0c;则会通过类加载机制加载类元信息&#xff08;Class Metadata&#xff09;到方法区。 这个过程包括&#xff1a;加载&#xff08;load…

Navicat 技术指引 | TiDB 的 AI 查询交互功能

目前&#xff0c;Navicat 两款工具支持对 TiDB 数据库的管理开发功能&#xff1a;一款是旗舰款 Navicat Premium&#xff0c;另一款是其轻量化功能的 Navicat Premium Lite&#xff08;官方轻量级免费版&#xff09;。Navicat 自版本 17.1 开始支持 TiDB 7。它支持的系统有 Win…

以list为输入条件,查询数据库表,java中的mapper层和mybatis层应该怎么写?

根据一个 List 中的两个字段 rangeCode 和 unitcd&#xff0c;查询数据库表 model_engineering_spatial_unit。这个需求在 Java MyBatis 项目中非常常见&#xff0c;下面我将为你详细写出 Mapper 接口&#xff08;Java&#xff09; 和 MyBatis XML 映射文件 的写法。 ✅ 前提…

pyspark 创建DataFrame

from pyspark.sql import SparkSession from pyspark.sql import StructType, StructField, IntegerType,StringType spark SparkSession.builder.appName(test).getOrCreate() 1、 从列表中创建DataFrame data [(1,"alice"),(2,Blob),(3,Charlie)] columns [&qu…

Vim:从入门到进阶的高效文本编辑器之旅

目录 一、Vim简介 二、Vim的基础操作 2.1 进入和退出Vim 2.2 Vim的三种模式 2.3 基础移动 三、Vim的高效编辑技巧 3.1 文本编辑 3.2 文本删除与修改 3.3 复制与粘贴 四、Vim的进阶使用 4.1 搜索与替换 4.2 寄存器与宏 4.3 插件与配置 五、结语 在编程界&#xff0…

Docker基础理论与阿里云Linux服务器安装指南

文章目录 一、Docker核心概念二、阿里云环境准备三、Docker安装与配置四、核心容器部署示例五、开发环境容器化六、运维管理技巧七、安全加固措施 一、Docker核心概念 容器化本质&#xff1a; 轻量级虚拟化技术&#xff0c;共享主机内核进程级隔离&#xff08;cgroups/namespac…

c#使用笔记之try catch和throw

一、try catch 一种报错的捕捉机制&#xff0c;try块里运行的代码出现错误的时候就会去执行catch块所以一般catch块里都是把错误打印出来或者保存到log日志里&#xff1b; 1.1、具体使用 catch可以用&#xff08;&#xff09;来选择捕捉什么类型的错误&#xff0c;一般用Exc…

(新手友好)MySQL学习笔记(9):索引(常见索引类型,查找结构的发展(二分查找法,二叉搜索树,平衡二叉树,B树,B+树))

目录 索引 常见索引类型 B树 二分查找法 二叉搜索树和平衡二叉树 B树和B树 索引 index&#xff0c;是存储引擎用于快速找到数据的一种数据结构。 MySQL默认使用InnoDB存储引擎&#xff0c;该存储引擎是最重要&#xff0c;使用最广泛的&#xff0c;除非有非常特别的原因需要使用…

进程间通信1(匿名管道)Linux

1 进程间通信的必要性 首先要明确进程间是相互独立的&#xff08;独享一份虚拟地址空间&#xff0c;页表&#xff0c;资源&#xff09;&#xff0c;那怎么样才能使得两个进程间实现资源的发送&#xff1f;所以&#xff0c;两个进程一定需要看到同一份资源&#xff0c;并且⼀个…

CAN2.0、DoIP、CAN-FD汽车协议详解与应用

一、CAN2.0 协议详解与应用示例 1. 技术原理与特性 协议架构&#xff1a;基于 ISO 11898 标准&#xff0c;采用载波监听多路访问 / 冲突检测&#xff08;CSMA/CD&#xff09;机制&#xff0c;支持 11 位&#xff08;CAN2.0A&#xff09;或 29 位&#xff08;CAN2.0B&#xff…

使用nvm管理npm和pnpm

1.使用nvm管理npm // 查看nvm版本 nvm -v // 查看可安装的 node 版本 nvm ls-remote // 安装指定 node 版本 nvm install 24.0.0 // 查看当前已安装的 node 版本及当前使用的版本 nvm list // 使用某个版本 node nvm use 24.0.0 // 卸载指定 node 版本 nvm uninstall 16.20.1…

YOLO11+QT6+Opencv+C++训练加载模型全过程讲解

实现效果&#xff1a; Yolov11环境搭建&#xff08;搭建好的可以直接跳过&#xff09; 最好使用Anconda进行包管理&#xff0c;安装可参考【文章】。下面简单过一下如何快速部署环境。如果搭建过或可以参考其他文章可以跳过Yolo11环境搭建这一章节。总体来说Yolov11环境搭建越…

Python 脚本,用于将 PDF 文件高质量地转换为 PNG 图像

import os import fitz # PyMuPDF from PIL import Image import argparse import logging from tqdm import tqdm# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(PDF2PNG)def convert_pdf_…

【CUDA GPU 支持安装全攻略】PyTorch 深度学习开发者指南

PyTorch 的 CUDA GPU 支持 安装五条铁律&#xff08;最新版 2025 修订&#xff09;&#xff08;适用于所有用户&#xff09;-CSDN博客 是否需要预先安装 CUDA Toolkit&#xff1f;——按使用场景分级推荐及进阶说明-CSDN博客 “100% 成功的 PyTorch CUDA GPU 支持” 安装攻略…

Cyberith 运动模拟器Virtualizer2:提升虚拟现实沉浸体验

奥地利Cyberith公司是一家专注于虚拟现实&#xff08;VR&#xff09;互动解决方案的创新型科技企业&#xff0c;以其研发的Virtualizer虚拟现实步态模拟设备而闻名。该公司的核心技术体现在其设计和制造的全方位跑步机式VR交互平台上&#xff0c;使得用户能够在虚拟环境中实现自…

常见的数据处理方法有哪些?ETL中的数据处理怎么完成

在数字化转型纵深推进的背景下&#xff0c;数据作为新型生产要素已成为驱动企业战略决策、科研创新及智能化运营的核心战略资产。数据治理价值链中的处理环节作为关键价值节点&#xff0c;其本质是通过系统化处理流程将原始观测数据转化为结构化知识产物&#xff0c;以支撑预测…

WHAT - 为甲方做一个官网(二)- 快速版

文章目录 一、明确需求优先级&#xff08;快速决策&#xff09;二、推荐零代码/低代码工具&#xff08;附对比&#xff09;方案1&#xff1a;低代码建站平台&#xff08;适合无技术用户&#xff0c;拖拽式操作&#xff09;方案2&#xff1a;CMS系统&#xff08;适合内容更新频繁…