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日

相关文章

  • ie css margin auto 不居中解决方案

    当使用IE浏览器时,使用margin属性的auto值来实现居中是一个常见的做法。但是由于IE浏览器的盒子模型计算方式不同于其他浏览器,会出现不居中的情况。下面将提供详细的解决方案。 问题分析 当使用margin:auto时,其他浏览器会根据标准盒子模型计算,将元素水平居中。而IE浏览器会根据传统盒子模型计算,导致元素无法居中。 解决方案 方案一:左右定位实现…

    css 2023年6月9日
    00
  • 详解HTML5中垂直上下居中的解决方案

    HTML5中垂直上下居中元素一直是开发者们比较困扰的问题。以下是一些可行的解决方案。 方法一:使用flexbox布局 flexbox布局在HTML5中被广泛应用,其实现垂直上下居中非常方便。具体实现如下: .container { display: flex; justify-content: center; align-items: center; hei…

    css 2023年6月10日
    00
  • H5手机端多文件上传预览插件

    H5手机端多文件上传预览插件可以方便地用于网站或应用的图片上传功能。下面是使用该插件的完整攻略: 1. 下载和引入插件文件 该插件可以在Github上下载。下载完成后,将jquery.uploader.js和jquery.uploader.css文件复制到项目中,并在HTML文件中引入这两个文件。 2. 编写HTML代码 在HTML代码中,需要添加一个文件上…

    css 2023年6月10日
    00
  • vue中渐进过渡效果实现

    下面是关于Vue中渐进过渡效果实现的完整攻略。 简介 在Vue中,过渡效果是一个非常重要的特性。可以用来创建动态的交互,使用户界面更加优雅、平滑。渐进效果是过渡效果中一种常见的类型。在渐进效果中,页面元素的出现或消失不是瞬间完成的,而是平滑地、逐渐地完成的。在这里,我们将介绍如何在Vue中实现渐进效果。 步骤 1. 安装Vue 首先,我们需要安装Vue。在命…

    css 2023年6月10日
    00
  • html css js 实现Tab标签页示例代码

    HTML、CSS、JS 实现 Tab 标签页是前端开发中常见的应用场景,可以通过实现 Tab 标签页来实现页面的切换和内容展示。下面我将详细讲解 HTML、CSS、JS 实现 Tab 标签页的攻略: HTML 页面结构 在 HTML 中,每个 Tab 页都可以用一个 div 元素来表示,其中每个 div 元素要包含一个与之相对应的唯一标识符 ID 和相应的内…

    css 2023年6月9日
    00
  • 奇妙的 CSS 属性 MASK详解

    CSS 属性 MASK 是一种非常有趣的属性,它可以让我们在元素上创建出各种奇妙的遮罩效果。本文将详细讲解 MASK 属性的使用方法和常见的遮罩效果,同时提供两个示例说明。 MASK 属性的使用方法 MASK 属性是 CSS3 中新增的属性,它可以让我们在元素上创建出各种奇妙的遮罩效果。MASK 属性有两个主要的属性值:mask-image 和 mask-t…

    css 2023年5月18日
    00
  • JavaScript for of

    JavaScript的for of循环是ES6中的一个新特性,它可以用于遍历可迭代对象(Iterable)。本文将详细介绍for of循环的使用方法,以及提供代码示例。 for of循环的基本语法如下: for (let item of iterable) { // Statement } 其中,iterable表示一个可迭代对象,如字符串、数组、Set、M…

    Web开发基础 2023年3月30日
    00
  • 微信小程序实现动态获取元素宽高的方法分析

    微信小程序实现动态获取元素宽高的方法分析 在开发微信小程序的过程中,我们经常需要获取某个元素的宽高来进行一些动态操作、布局等。下面就来详细讲解如何实现动态获取元素宽高的方法。 方法1:使用wx.createSelectorQuery() wx.createSelectorQuery() 是微信小程序提供的API,它可以获取到页面中某个节点的信息。其使用方法如…

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