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

yizhihongxing

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路由跳转与接收参数的实现方式可以通过以下步骤完成: 安装 vue-router 插件 vue-router 是 Vue.js 官方的路由管理插件,需要先安装并在项目中引入。 可以使用 npm 进行安装,命令如下: npm install vue-router –save 创建路由对象 在项目中创建一个 router.js 文件,并在该文件中创建一个路…

    Vue 2023年5月27日
    00
  • Vue使用echarts的完整步骤及解决各种报错

    Vue使用echarts步骤: 安装echarts 在项目中安装echarts依赖。使用npm安装,在终端中输入以下命令: npm install echarts –save 引入echarts 在需要使用echarts的组件中引入echarts。 import echarts from ‘echarts’ 初始化图表 使用echarts提供的初始化方法进…

    Vue 2023年5月28日
    00
  • Vue响应式原理模拟实现原理探究

    Vue响应式原理模拟实现原理探究 什么是 Vue 响应式原理? Vue.js 是一个基于数据驱动的前端框架,主要利用观察者模式实现了 MVVM 模式。在 Vue 中,我们可以通过操作数据来动态改变视图,并且数据和视图是“响应式”的,即数据变化后,对应的视图也会发生变化。 Vue 响应式原理模拟实现 响应式对象 在 Vue 中,可以将一个对象设置为“响应式”的…

    Vue 2023年5月28日
    00
  • vue2源码解析之全局API实例详解

    “vue2源码解析之全局API实例详解”是一篇深入分析Vue.js源码的文章,主要介绍了Vue.js全局API的相关实例,为读者深入了解Vue.js源码提供了基础。 本文主要涉及到Vue.js的全局API实例,包括Vue.extend、Vue.nextTick、Vue.set、Vue.delete等。其中,Vue.extend用于创建具有复用性的组件构造器;…

    Vue 2023年5月27日
    00
  • VsCode新建VueJs项目的详细步骤

    下面是VsCode新建VueJs项目的详细步骤的完整攻略。 1. 确认安装Node.js 在开始创建VueJS项目之前,请先确认你的电脑上已经正确安装了Node.js。你可以在命令行中输入以下代码检查Node.js是否已经成功安装: node -v 如果能够正确输出版本号,就表示已经安装成功了。 2. 安装Vue CLI 在安装VueCLI之前,请先在命令行…

    Vue 2023年5月28日
    00
  • vue 组件使用中的一些细节点

    下面我来详细讲解一下vue组件使用中的一些细节点。 组件标签名的命名 在Vue中使用组件需要先在Vue实例中注册该组件,命名时需要注意以下几点: 组件标签名建议使用连字符形式如 <my-component></my-component>,而不是驼峰式形式如 <MyComponent></MyComponent>…

    Vue 2023年5月27日
    00
  • vue如何定义全局变量和全局方法实例代码

    下面我将详细讲解Vue如何定义全局变量和全局方法的实例代码。 定义全局变量 在Vue中,定义全局变量可以通过Vue的原型挂载属性的方式,以下是具体实现步骤: 首先在Vue实例化之前,通过Vue的原型注册全局属性: Vue.prototype.$globalVariable = ‘global_variable’; 这个例子中注册了一个名为$globalVar…

    Vue 2023年5月28日
    00
  • vue element中axios下载文件(后端Python)

    下面是详细的讲解: 背景介绍 在使用Vue Element 开发时,我们常常会遇到需要通过axios发送请求来下载文件的情况。而本文将给大家介绍如何在Vue Element中通过axios下载文件,以及前后端代码示例。 步骤 步骤一:创建后端Python代码 我们首先需要在后端编写Python代码,用于向前端提供下载文件的接口。 示例代码: from fla…

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