当前位置:首页 > 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; /* 足够大的值容纳内容 */
}

多级评论处理

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

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实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统…