JS仿QQ好友列表展开、收缩功能(第一篇)

下面我将详细讲解 “JS仿QQ好友列表展开、收缩功能(第一篇)” 的完整攻略。

简介

本篇文章主要是介绍如何使用 JavaScript 编写一个仿 QQ 好友列表的展开、收缩功能,实现点击好友分组,可以收缩或展开该分组中的好友。

HTML结构

我们先来看一下需要实现的 HTML 结构:

<div class="friend-list">
  <div class="friend-group">
    <div class="group-title">我的好友</div>
    <ul class="friend-items">
      <li class="friend-item">友1</li>
      <li class="friend-item">友2</li>
      <li class="friend-item">友3</li>
      <li class="friend-item">友4</li>
    </ul>
  </div>
  <div class="friend-group">
    <div class="group-title">家人</div>
    <ul class="friend-items">
      <li class="friend-item">父亲</li>
      <li class="friend-item">母亲</li>
      <li class="friend-item">兄弟</li>
      <li class="friend-item">姐妹</li>
    </ul>
  </div>
</div>

CSS样式

为了美观,我们需要对 HTML 结构进行一些样式上的调整。这里仅列出关键代码:

.friend-group .group-title {
  cursor: pointer;
}
.friend-items {
  display: none;
}
.friend-items.show {
  display: block;
}

JavaScript代码

我们主要通过 JavaScript,实现好友分组的展开与收缩。先贴出完整的 JavaScript 代码:

var groups = document.querySelectorAll('.friend-group');  // 获取所有好友分组

for (var i = 0; i < groups.length; i++) {
  var group = groups[i];
  var title = group.querySelector('.group-title');    // 当前分组的标题
  title.onclick = function() {  // 点击标题时切换分组的展开状态
    var items = this.parentNode.querySelector('.friend-items');  // 当前分组所有的好友列表
    if (items.classList.contains('show')) {
      items.classList.remove('show');
    } else {
      items.classList.add('show');
    }
  }
}

我们需要做的是,获取所有好友分组,并且为每个分组的标题添加一个点击事件。当点击标题时,我们需要切换分组的展开状态。

先获取当前分组下所有的好友列表,再判断好友列表是否已经展开。如果已经展开,我们需要将其设置为隐藏状态;否则,我们将其设置为显示状态。

示例说明

下面,我们来看两个示例说明,以便更好地理解实现过程。

示例一

那么,我们该如何实现“我的好友”分组的默认展开呢?我们可以在 JavaScript 代码中,手动为“我的好友”分组添加一个 .show 样式,代码如下:

var groups = document.querySelectorAll('.friend-group');  // 获取所有好友分组

for (var i = 0; i < groups.length; i++) {
  var group = groups[i];
  var title = group.querySelector('.group-title');    // 当前分组的标题
  var items = group.querySelector('.friend-items');    // 当前分组所有的好友列表
  if (title.innerHTML === '我的好友') {    // 手动为“我的好友”分组添加.show样式
    items.classList.add('show');
  }
  title.onclick = function() {  // 点击标题时切换分组的展开状态
    var items = this.parentNode.querySelector('.friend-items');  // 当前分组所有的好友列表
    if (items.classList.contains('show')) {
      items.classList.remove('show');
    } else {
      items.classList.add('show');
    }
  }
}

示例二

假设我们现在需要将展开、收缩的效果修改为向上、向下滑动的效果。解决方法很简单:只需将原来的 display:none 改为使用 height: 0overflow: hidden;将原来的 display:block 改为使用 height: auto,代码如下:

.friend-items {
  height: 0;
  overflow: hidden;
}
.friend-items.show {
  height: auto;
}

至此,本篇文章的代码实现过程就介绍完了。该完整攻略可以通过表格形式或者图解的形式呈现出来,但是本示例将文字和代码结合,帮助大家更好地理解实现过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS仿QQ好友列表展开、收缩功能(第一篇) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Bootstrap安装环境配置教程分享

    Bootstrap是一款十分流行的响应式前端框架,在进行开发前,我们需要进行Bootstrap的安装和环境配置。下面我将分享一份完整的教程攻略,其中包括Bootstrap的安装和环境配置,以及两条示例说明。 安装和配置Bootstrap 1. 下载Bootstrap 先进入Bootstrap的官网 https://getbootstrap.com/docs/…

    css 2023年6月10日
    00
  • Angular模版驱动表单的使用总结

    当初版面极少,我使用文章“Angular模版驱动表单的使用总结”做详细讲解。这篇文章提供了对Angular模版驱动表单的全面概述,并提供了该系统的使用技巧和示例。 什么是Angular模版驱动表单 Angular模版驱动表单是Angular框架中的一种机制,它允许我们使用指令和元素属性创建表单控件,而不是在代码中硬编码控件。这使得HTML代码更加干净并且易于…

    css 2023年6月9日
    00
  • webpack安装配置及使用教程详解

    Webpack是一个现代化的前端构建工具,用于打包、转换、优化和管理前端资源。在使用Webpack之前,需要安装Node.js以及npm(Node Package Manager)。 以下是Webpack安装配置及使用的详细教程: 第一步:安装Webpack 打开命令行终端(Windows用户可使用PowerShell); 输入以下命令进行全局安装Webpa…

    css 2023年6月9日
    00
  • CSS样式按整洁易懂的结构组织

    在编写CSS样式时,整洁易懂的结构组织是非常重要的。这可以使代码易于阅读、维护和修改。以下是CSS样式按整洁易懂的结构组织的完整攻略: 1. 选择器的组织 在编写CSS代码时,选择器的组织是很重要的。通常情况下,我们使用层叠的选择器结构来定义样式。在定义选择器时,应该优先考虑ID选择器、class选择器,然后再使用标签名选择器。这样可以提高代码的可读性、性能…

    css 2023年6月9日
    00
  • jQuery中Nicescroll滚动条插件的用法

    下面是关于jQuery中Nicescroll滚动条插件的用法的完整攻略。 1. Nicescroll滚动条插件简介 Nicescroll是一款轻量级的滚动条插件,能够对网站的滚动条进行美化和自定义,包含多种风格和主题,非常实用。 2. Nicescroll的安装和文件引入 首先,需要将Nicescroll的文件下载到本地项目中,包含nicescroll.js…

    css 2023年6月10日
    00
  • js实现图片无缝滚动特效

    下面是“js实现图片无缝滚动特效”的完整攻略: 简介 无缝滚动特效是网页设计中常用的效果之一,可以使页面更加生动和丰富。JS实现图片无缝滚动特效需要以下几个步骤: HTML布局; CSS样式; JS编写。 HTML布局 在HTML中,需要先设置好图片的容器和展示区域。 <div class="scroll-container"&gt…

    css 2023年6月11日
    00
  • 举例详解CSS的z-index属性的使用

    下面是“举例详解CSS的z-index属性的使用”的完整攻略。 什么是z-index属性 z-index是CSS的一个属性,用来定义HTML元素的层级关系,决定哪些元素在前面,哪些元素在后面。 z-index的取值范围 值得注意的是,z-index的取值是一个整数,它的取值范围是必须是一个整数, 取值范围是-2147483648到2147483647,可以是…

    css 2023年6月10日
    00
  • CSS常用样式之绘制双箭头的示例代码

    下面是关于“CSS常用样式之绘制双箭头的示例代码”的细致讲解,包含了两个示例说明。 1. 思路分析 绘制双箭头需要用到CSS的伪元素:::before 和 ::after,双箭头效果就是将一个箭头嵌套在另一个箭头的里面,通过旋转和透明度调整位置达到叠加的效果。因此,我们需要设计两个箭头,一个外层箭头,一个内层箭头,并且通过CSS动画实现旋转和透明度变化。 2…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部