当前位置:首页 > JavaScript

js实现评论折叠与展开

2026-01-31 09:18:05JavaScript

实现评论折叠与展开的步骤

使用CSS控制显示与隐藏

通过CSS的display属性控制评论区域的显示状态。默认隐藏部分内容,点击按钮时切换状态。

.comment-content {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3; /* 限制显示行数 */
  -webkit-box-orient: vertical;
}
.comment-content.expanded {
  display: block;
  -webkit-line-clamp: unset;
}

HTML结构

创建包含评论内容和切换按钮的HTML结构。

<div class="comment">
  <div class="comment-content">
    <!-- 这里是评论内容 -->
  </div>
  <button class="toggle-btn">展开</button>
</div>

JavaScript逻辑

通过事件监听实现点击按钮切换评论展开/折叠状态。

document.querySelectorAll('.toggle-btn').forEach(btn => {
  btn.addEventListener('click', function() {
    const content = this.previousElementSibling;
    content.classList.toggle('expanded');

    this.textContent = content.classList.contains('expanded') 
      ? '折叠' 
      : '展开';
  });
});

动态加载内容

若评论内容需要异步加载,可使用以下方法:

function loadComments() {
  fetch('/api/comments')
    .then(response => response.json())
    .then(data => {
      const container = document.getElementById('comments-container');
      data.forEach(comment => {
        container.innerHTML += `
          <div class="comment">
            <div class="comment-content">${comment.text}</div>
            <button class="toggle-btn">展开</button>
          </div>
        `;
      });
      // 重新绑定事件
      bindToggleEvents();
    });
}

function bindToggleEvents() {
  document.querySelectorAll('.toggle-btn').forEach(btn => {
    btn.addEventListener('click', function() {
      // 同上文切换逻辑
    });
  });
}

动画效果增强

添加CSS过渡效果使展开/折叠更平滑。

.comment-content {
  max-height: 4.5em; /* 3行高度(假设行高1.5em) */
  transition: max-height 0.3s ease;
}
.comment-content.expanded {
  max-height: 1000px; /* 足够大的值容纳内容 */
}

多级评论处理

对于嵌套评论,可递归处理折叠状态。

js实现评论折叠与展开

function setupNestedComments(container) {
  container.querySelectorAll('.comment').forEach(comment => {
    const toggleBtn = comment.querySelector('.toggle-btn');
    if (toggleBtn) {
      toggleBtn.addEventListener('click', function() {
        // 切换当前评论和子评论
        comment.classList.toggle('expanded');
      });
    }
  });
}

通过以上方法可以实现基本的评论折叠与展开功能,同时支持动态加载和动画效果。根据实际需求可调整显示行数、动画时长等参数。

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…