677 字
3 分鐘
博客搜索功能开发记录

功能概述#

博客搜索功能是一个重要的内容导航工具,它可以帮助读者快速找到感兴趣的文章。主要特点包括:

  1. 实时搜索:输入即搜索,无需等待
  2. 毛玻璃效果:现代化的 UI 设计
  3. 响应式布局:同时支持桌面端和移动端
  4. 离线支持:使用 pagefind 实现静态搜索

技术实现#

1. 组件结构#

使用 Svelte 开发,主要包含以下部分:

  • 桌面端搜索栏
  • 移动端搜索按钮
  • 搜索结果面板
  • 搜索结果列表

2. 搜索面板设计#

使用 dialog 元素实现模态框效果:

<dialog id="search-panel" 
  class="float-panel float-panel-closed absolute md:w-[30rem] 
         top-20 left-4 md:left-[unset] right-4 p-2">
  <!-- 搜索内容 -->
</dialog>

3. 搜索逻辑#

集成 pagefind 实现静态搜索:

search = async (keyword: string, isDesktop: boolean) => {
  if (!keyword) {
    result = []
    return
  }

  try {
    const ret = await pagefind.search(keyword)
    const arr = []
    for (const item of ret.results) {
      arr.push(await item.data())
    }
    result = arr
  } catch (e) {
    console.warn('Search failed:', e)
    result = []
  }
}

4. UI 交互#

实现了多种交互方式:

  • 点击外部区域关闭
  • ESC 键关闭
  • 自动聚焦搜索框
  • 平滑的动画效果

开发难点#

1. 毛玻璃效果#

遇到的问题:

  • 背景透明度处理
  • 跨浏览器兼容性
  • 暗色模式适配

解决方案:

.search-panel {
  background: rgba(255, 255, 255, 0.1);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border: 1px solid rgba(255, 255, 255, 0.2);
}

/* 暗色模式 */
@media (prefers-color-scheme: dark) {
  .search-panel {
    background: rgba(28, 28, 28, 0.5);
    border-color: rgba(255, 255, 255, 0.1);
  }
}

/* 降级方案 */
@supports not ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {
  .search-panel {
    background: rgba(255, 255, 255, 0.95);
  }
}

2. 搜索体验#

主要问题:

  • 搜索响应速度
  • 结果展示方式
  • 移动端适配
  • 键盘操作支持

改进措施:

  • 优化搜索触发时机
  • 改进结果展示布局
  • 添加加载状态提示
  • 支持键盘导航

3. 开发环境支持#

开发时的问题:

  • pagefind 索引生成
  • 实时预览支持
  • 构建过程集成

解决方案:

  • 使用 npm scripts 自动化构建
  • 开发环境提供模拟数据
  • 优化构建配置

未来计划#

  1. 功能增强:

    • 搜索结果高亮
    • 搜索历史记录
    • 搜索建议功能
    • 分类过滤支持
  2. 性能优化:

    • 搜索索引优化
    • 结果缓存机制
    • 懒加载优化
  3. 用户体验:

    • 更好的错误提示
    • 更多键盘快捷键
    • 搜索统计功能

总结#

搜索功能的开发过程中,我们重点关注:

  1. 用户体验的流畅性
  2. 界面设计的现代感
  3. 搜索功能的实用性
  4. 代码的可维护性

通过这些努力,我们实现了一个既美观又实用的博客搜索功能。

参考资料#

  1. Pagefind 文档
  2. Dialog 元素 MDN
  3. Backdrop Filter MDN
博客搜索功能开发记录
https://zeox.pages.dev/posts/search-development/
作者
Villode
發佈於
2024-02-28
許可協議
CC BY-NC-SA 4.0