如何实现博客文章卡片的动态分类筛选功能

来源:站长站作者:冷风头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何实现博客文章卡片的动态分类筛选功能》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何实现博客文章卡片的动态分类筛选功能》有用,将其分享出去将是对创作者最好的鼓励。

博客文章卡片的动态分类筛选功能可以让用户快速找到感兴趣的内容,不需要跳转页面就能完成分类切换,提升整体浏览体验。实现这个功能的核心是通过JavaScript监听分类按钮的点击事件,对文章数据进行过滤后重新渲染对应的卡片。

如何实现博客文章卡片的动态分类筛选功能

基础数据结构设计

首先需要准备文章数据和分类数据,文章数据中需要包含分类标识,方便后续筛选匹配。以下是示例数据结构:

// 分类数据
const categories = [
  { id: 'all', name: '全部' },
  { id: 'frontend', name: '前端开发' },
  { id: 'backend', name: '后端开发' },
  { id: 'devops', name: '运维部署' }
];

// 文章卡片数据
const articleList = [
  {
    id: 1,
    title: 'Vue3组件通信方式详解',
    category: 'frontend',
    desc: '介绍Vue3中多种组件通信的实现方案',
    date: '2024-05-10'
  },
  {
    id: 2,
    title: 'Node.js接口鉴权实现',
    category: 'backend',
    desc: '基于JWT实现Node.js接口的权限校验',
    date: '2024-05-08'
  },
  {
    id: 3,
    title: 'Docker容器部署实战',
    category: 'devops',
    desc: '讲解Docker打包部署前端项目的完整流程',
    date: '2024-05-06'
  },
  {
    id: 4,
    title: 'React Hooks使用技巧',
    category: 'frontend',
    desc: '分享React Hooks开发中的实用小技巧',
    date: '2024-05-04'
  }
];

页面结构搭建

页面需要包含分类按钮区域和文章卡片展示区域,分类按钮对应上面的分类数据,卡片区域初始渲染所有文章。结构如下:

<div class="filter-container">
  <div class="category-btns" id="categoryBtns">
    <!-- 分类按钮会动态生成 -->
  </div>
  <div class="article-cards" id="articleCards">
    <!-- 文章卡片会动态生成 -->
  </div>
</div>

核心筛选逻辑实现

1. 渲染分类按钮

首先遍历分类数据生成按钮,给全部按钮添加默认激活样式,同时给每个按钮绑定点击事件:

const categoryBtns = document.getElementById('categoryBtns');

// 渲染分类按钮
function renderCategoryBtns() {
  categoryBtns.innerHTML = categories.map(item => {
    return `<button class="category-btn ${item.id === 'all' ? 'active' : ''}" data-id="${item.id}">${item.name}</button>`;
  }).join('');

  // 绑定按钮点击事件
  const btns = categoryBtns.querySelectorAll('.category-btn');
  btns.forEach(btn => {
    btn.addEventListener('click', function() {
      // 移除所有按钮的激活样式
      btns.forEach(b => b.classList.remove('active'));
      // 给当前点击的按钮添加激活样式
      this.classList.add('active');
      // 获取当前选中的分类id
      const currentCategory = this.dataset.id;
      // 执行筛选逻辑
      filterArticles(currentCategory);
    });
  });
}

2. 筛选文章数据

根据选中的分类id过滤文章数据,如果选中的是全部则直接返回所有文章:

// 筛选文章数据
function filterArticles(categoryId) {
  if (categoryId === 'all') {
    return articleList;
  }
  return articleList.filter(item => item.category === categoryId);
}

3. 渲染文章卡片

将筛选后的文章数据渲染成卡片结构,插入到卡片容器中:

const articleCards = document.getElementById('articleCards');

// 渲染文章卡片
function renderArticleCards(list) {
  if (list.length === 0) {
    articleCards.innerHTML = '<p class="empty-tip">暂无对应分类的文章</p>';
    return;
  }
  articleCards.innerHTML = list.map(item => {
    return `
      <div class="article-card">
        <h3 class="card-title">${item.title}</h3>
        <p class="card-desc">${item.desc}</p>
        <p class="card-date">发布时间:${item.date}</p>
      </div>
    `;
  }).join('');
}

初始化与优化

页面加载完成后先执行初始化操作,同时可以添加简单的过渡效果提升体验:

// 初始化
function init() {
  renderCategoryBtns();
  renderArticleCards(articleList);
}

// 页面加载完成后执行初始化
window.addEventListener('DOMContentLoaded', init);

如果需要优化渲染性能,可以在筛选时先隐藏不符合条件的卡片,而不是重新生成所有DOM,减少重排重绘的开销。如果是数据量较大的场景,还可以结合虚拟列表的方案进一步优化渲染效率。

整个功能的实现逻辑并不复杂,核心就是事件监听、数据过滤、DOM更新三个环节,开发者可以根据实际的博客样式需求调整卡片和按钮的样式,适配不同的页面设计。

JavaScript动态筛选前端交互博客开发修改时间:2026-07-20 09:42:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。