JS面向对象编程实现的Tab选项卡案例详解

JS面向对象编程实现的Tab选项卡案例详解

介绍

Tab选项卡是网页中常见的一种交互方式,通过点击不同的选项卡,切换展示不同的内容。本文将介绍如何使用JavaScript面向对象编程实现一个Tab选项卡的效果。

准备工作

HTML结构

首先,需要在HTML中创建Tab选项卡的结构。以下是一个简单的示例:

<div class="tab">
  <ul class="tab-nav">
    <li class="active">选项卡1</li>
    <li>选项卡2</li>
    <li>选项卡3</li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane active">
      第一个选项卡的内容
    </div>
    <div class="tab-pane">
      第二个选项卡的内容
    </div>
    <div class="tab-pane">
      第三个选项卡的内容
    </div>
  </div>
</div>

其中,.tab-nav是选项卡的导航栏,.active表示当前激活的选项卡,.tab-content是选项卡的内容区域,.tab-pane是每个选项卡对应的内容。

CSS样式

接下来,需要添加一些CSS样式来美化选项卡。以下是一个简单的示例:

.tab-nav {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  justify-content: space-between;
  border-bottom: 1px solid #ccc;
}

.tab-nav li {
  flex: 1;
  text-align: center;
  padding: 10px;
  background-color: #f5f5f5;
  cursor: pointer;
}

.tab-nav li.active {
  background-color: #fff;
  border-bottom: none;
}

.tab-content .tab-pane {
  display: none;
  padding: 20px;
}

.tab-content .tab-pane.active {
  display: block;
}

以上样式为Tab选项卡提供了基本的样式,可以根据需求进行修改。

JavaScript文件

最后,需要创建一个JavaScript文件,用于实现Tab选项卡的功能。以下是一个简单的示例:

class Tab {
  constructor(tab) {
    this.tab = tab;
    this.nav = tab.querySelector('.tab-nav');
    this.panels = tab.querySelectorAll('.tab-pane');
    this.activeIndex = 0;
    this.init();
  }

  init() {
    this.bindEvents();
    this.panels[this.activeIndex].classList.add('active');
  }

  bindEvents() {
    this.nav.addEventListener('click', (e) => {
      if (e.target.tagName === 'LI') {
        const index = Array.from(this.nav.children).indexOf(e.target);
        this.switchTab(index);
      }
    });
  }

  switchTab(index) {
    if (index === this.activeIndex) return;
    this.panels[this.activeIndex].classList.remove('active');
    this.panels[index].classList.add('active');
    this.nav.children[this.activeIndex].classList.remove('active');
    this.nav.children[index].classList.add('active');
    this.activeIndex = index;
  }
}

const tab = new Tab(document.querySelector('.tab'));

实现过程

在上面的代码中,我们定义了一个 Tab 类,该类接受一个包含选项卡结构的 DOM 元素作为构造函数的参数。在构造函数中,我们获取了选项卡导航栏、选项卡内容区域和当前激活的选项卡索引(默认为0),并调用了 init 方法。

init 方法中,我们通过调用 bindEvents 方法绑定了选项卡导航栏的点击事件,并调用了 switchTab 方法切换到当前激活的选项卡。

bindEvents 方法中,我们使用了事件委托的方式,监听了选项卡导航栏的点击事件,并根据点击的元素计算出对应的选项卡索引,然后调用了 switchTab 方法进行切换。

switchTab 方法中,我们首先判断如果点击的选项卡和当前激活的选项卡相同,则不做任何处理。然后,我们将当前激活的选项卡的 active 类名移除,将点击的选项卡的 active 类名添加,同时也对应地切换了它们对应的内容区域,最后将当前激活的选项卡索引设置为点击的选项卡的索引。

示例说明

示例一

<div class="tab">
  <ul class="tab-nav">
    <li class="active">选项卡1</li>
    <li>选项卡2</li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane active">
      第一个选项卡的内容
    </div>
    <div class="tab-pane">
      第二个选项卡的内容
    </div>
  </div>
</div>

在这个示例中,我们创建了一个包含两个选项卡的Tab,第一个选项卡为当前激活状态。我们使用上面提到的JavaScript文件对这个Tab进行了初始化,这样点击不同的选项卡时,对应的内容区域就会展示出来。

示例二

<div class="tab">
  <ul class="tab-nav">
    <li class="active">选项卡1</li>
    <li>选项卡2</li>
    <li>选项卡3</li>
    <li>选项卡4</li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane active">
      第一个选项卡的内容
    </div>
    <div class="tab-pane">
      第二个选项卡的内容
    </div>
    <div class="tab-pane">
      第三个选项卡的内容
    </div>
    <div class="tab-pane">
      第四个选项卡的内容
    </div>
  </div>
</div>

在这个示例中,我们创建了一个包含四个选项卡的Tab,第一个选项卡为当前激活状态。同样地,我们使用上面提到的JavaScript文件对这个Tab进行了初始化,这样点击不同的选项卡时,对应的内容区域就会展示出来。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS面向对象编程实现的Tab选项卡案例详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue手写防抖和节流函数代码详解

    针对你提出的主题 “Vue手写防抖和节流函数代码详解”,我来进行详细讲解。 一、什么是防抖和节流函数 在前端开发中,很多时候会遇到一些需要节流或防抖的场景,例如在频繁进行搜索时,可以使用节流函数,减少无意义的请求;在监听窗口 resize 或滚动事件等操作时,可以使用防抖函数避免频繁执行代码。两种函数的作用如下: 防抖函数:多次触发事件后,函数只会执行一次,…

    Vue 2023年5月28日
    00
  • vue+element+oss实现前端分片上传和断点续传

    让我来详细讲解一下“vue+element+oss实现前端分片上传和断点续传”的完整攻略。 前置知识 在开始之前,我们需要确保您已经掌握以下技能: vue.js框架 element-ui组件库 Javascript 阿里云OSS 准备工作 在开始项目之前,您需要准备以下工具: npm包管理器 vue-cli脚手架 项目搭建 首先,我们需要使用vue-cli创…

    Vue 2023年5月28日
    00
  • VUE+Canvas 实现桌面弹球消砖块小游戏的示例代码

    首先,使用Vue.js和Canvas API实现桌面弹球消砖块小游戏需要完成以下步骤: 创建基本的Vue.js应用程序结构,包括模板、组件和数据绑定。 在Vue.js组件中创建一个Canvas元素,并使用Canvas API绘制游戏元素。 使用Vue.js监听用户交互事件,并更新Canvas元素以实现用户操作。 实现游戏逻辑,包括弹球的运动轨迹、碰撞检测和砖…

    Vue 2023年5月27日
    00
  • Vue-router的使用和出现空白页,路由对象属性详解

    Vue-router是Vue.js官方的路由管理器,可以快速地搭建单页面应用程序(SPA),并提供了丰富的导航解决方案。 Vue-router的使用 1. 安装和引入 安装Vue-router可以使用npm或yarn,在项目目录下运行以下命令: npm install vue-router 安装完成后,在项目中引入Vue-router: import Vue…

    Vue 2023年5月28日
    00
  • vue如何实现Json格式数据展示

    要展示Json格式数据,我们可以使用Vue框架的v-for指令。v-for指令可以循环遍历数组或对象中的元素,根据元素的个数生成相应的DOM节点。 下面是一个简单的示例,以渲染包含一些数据的表格为例: <table> <thead> <tr> <th>Name</th> <th>Emai…

    Vue 2023年5月27日
    00
  • vue-Split实现面板分割

    当我们需要在一个页面中实现左右、上下或其他方向的面板分割时,可以使用 vue-Split 插件来实现此功能。以下是完整的攻略。 步骤一:安装vue-Split 首先需要在项目中安装 vue-Split 插件,可以通过 npm 安装: npm install vue-split@0.1.4 或是通过引入网上的 CDNs: <link rel="…

    Vue 2023年5月27日
    00
  • Vue分析同步和异步有什么区别

    Vue分析同步和异步的区别是一个非常重要的概念,在我们设计和开发Vue应用程序的过程中需要非常清楚。本篇攻略将详细讲解Vue中同步和异步的概念,并通过两个示例说明它们之间的区别。 什么是同步和异步? 在JavaScript中,同步和异步是指代码执行的方式。同步代码按顺序执行,也就是说当一个函数被调用时,代码会等待函数内部所有的操作完成后,才会执行下一个代码块…

    Vue 2023年5月27日
    00
  • 对vuex中store和$store的区别说明

    对vuex中store和$store的区别说明 在使用Vue框架开发应用时,如果需要进行状态管理,通常使用Vuex库。在使用Vuex时,我们经常会看到store和$store这两个概念,这两者之间有什么区别呢? store store是Vuex的核心概念,它是一个数据存储的中心,用于管理着应用程序中的全部响应式状态。store中的状态是响应式的,这意味着当我…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部