一个精简的JS DIV层tab切换代码

下面是一个精简的JS DIV层tab切换代码的完整攻略。

什么是DIV层tab切换?

在网站中,为了将内容进行分类,我们会将内容放在不同的tab标签中,这些标签可以通过切换来显示不同的内容区域。而DIV层tab切换就是一种常见的实现方式,它基于DIV层和JavaScript代码来完成。

如何实现DIV层tab切换?

首先,我们需要在HTML中添加DIV标签,每个DIV表示一个内容区域。然后,我们需要添加tab标签,点击tab标签时可以切换不同的内容区域。接下来,我们需要编写JavaScript代码,监听tab标签的点击事件,当点击事件触发时,切换不同的内容区域。

实现步骤

  1. HTML代码。首先,我们需要定义一组tab标签和对应的内容区域,如下所示:
<div class="tab-container">
  <ul class="tab-nav clearfix">
    <li class="active">Tab A</li>
    <li>Tab B</li>
    <li>Tab C</li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane active">Content A</div>
    <div class="tab-pane">Content B</div>
    <div class="tab-pane">Content C</div>
  </div>
</div>

其中,tab-nav表示tab标签,tab-content表示内容区域。我们使用active来表示当前选中的标签和内容区域。

  1. CSS代码。我们需要为tab标签和内容区域添加样式,如下所示:
.tab-nav li {
  float: left;
  margin-right: 20px;
  cursor: pointer;
}

.tab-nav li.active {
  font-weight: bold;
}

.tab-pane {
  display: none;
}

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

其中,tab-nav样式用来设置tab标签的样式,tab-pane样式用来设置内容区域的样式。使用display:none来隐藏非选中的内容区域,使用display:block来显示选中的内容区域。

  1. JavaScript代码。我们需要监听tab标签的点击事件,当点击事件触发时,切换不同的内容区域。代码如下所示:
var tabContainer = document.querySelector('.tab-container');
var tabNavs = tabContainer.querySelectorAll('.tab-nav li');
var tabPanes = tabContainer.querySelectorAll('.tab-pane');

for (var i = 0; i < tabNavs.length; i++) {
  tabNavs[i].onclick = function() {
    // 取消所有选中状态
    for (var j = 0; j < tabNavs.length; j++) {
      tabNavs[j].classList.remove('active');
    }
    for (var k = 0; k < tabPanes.length; k++) {
      tabPanes[k].classList.remove('active');
    }

    // 添加当前选中状态
    this.classList.add('active');
    var index = Array.prototype.indexOf.call(this.parentNode.children, this);
    tabPanes[index].classList.add('active');
  }
}

其中,我们使用querySelector和querySelectorAll来获取相关元素。然后,我们遍历tab标签,为每个标签绑定一个点击事件。当点击事件触发时,我们首先清空所有选中状态,然后选中当前标签和对应的内容区域。

示例说明

下面给出两个示例,分别实现了左右切换和自动切换的效果。

示例1:左右切换

在tab-nav标签列表的左右两侧放置prev和next标签,点击prev可以切换到前一个tab标签,点击next可以切换到下一个tab标签。代码如下所示:

<div class="tab-container">
  <ul class="tab-nav clearfix">
    <li class="active">Tab A</li>
    <li>Tab B</li>
    <li>Tab C</li>
    <li class="prev"><< prev</li>
    <li class="next">next >></li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane active">Content A</div>
    <div class="tab-pane">Content B</div>
    <div class="tab-pane">Content C</div>
  </div>
</div>

<style>
.tab-nav li.prev,
.tab-nav li.next {
  font-weight: normal;
  cursor: pointer;
}

.tab-nav li.prev {
  float: left;
}

.tab-nav li.next {
  float: right;
}

.tab-nav li.prev:hover,
.tab-nav li.next:hover {
  font-weight: bold;
}

.tab-nav li.prev.disabled,
.tab-nav li.next.disabled {
  color: #ccc;
  cursor: default;
  pointer-events: none;
}

.tab-nav li.prev.disabled:hover,
.tab-nav li.next.disabled:hover {
  font-weight: normal;
  text-decoration: none;
}
</style>

<script>
var tabContainer = document.querySelector('.tab-container');
var tabNavs = tabContainer.querySelectorAll('.tab-nav li');
var tabPanes = tabContainer.querySelectorAll('.tab-pane');
var prev = tabContainer.querySelector('.prev');
var next = tabContainer.querySelector('.next');

var cursor = 0; // 当前选中标签的索引

prev.onclick = function() {
  if (cursor > 0) {
    tabNavs[cursor].classList.remove('active');
    tabPanes[cursor].classList.remove('active');

    cursor--;
    tabNavs[cursor].classList.add('active');
    tabPanes[cursor].classList.add('active');

    updateNavStatus(); // 更新prev和next的状态
  }
}

next.onclick = function() {
  if (cursor < tabNavs.length - 3) {
    tabNavs[cursor].classList.remove('active');
    tabPanes[cursor].classList.remove('active');

    cursor++;
    tabNavs[cursor].classList.add('active');
    tabPanes[cursor].classList.add('active');

    updateNavStatus(); // 更新prev和next的状态
  }
}

function updateNavStatus() {
  if (cursor === 0) {
    prev.classList.add('disabled');
  } else {
    prev.classList.remove('disabled');
  }

  if (cursor === tabNavs.length - 3) {
    next.classList.add('disabled');
  } else {
    next.classList.remove('disabled');
  }
}
</script>

示例2:自动切换

自动切换可以设置一个定时器,每隔一定时间切换到下一个tab标签。代码如下所示:

<div class="tab-container">
  <ul class="tab-nav clearfix">
    <li class="active">Tab A</li>
    <li>Tab B</li>
    <li>Tab C</li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane active">Content A</div>
    <div class="tab-pane">Content B</div>
    <div class="tab-pane">Content C</div>
  </div>
</div>

<style>
.tab-nav li.active {
  font-weight: bold;
}

.tab-nav li:hover {
  font-weight: bold;
}

.tab-nav li.prev.disabled,
.tab-nav li.next.disabled {
  pointer-events: none;
}

.tab-nav li.prev.disabled:hover,
.tab-nav li.next.disabled:hover {
  font-weight: normal;
  text-decoration: none;
}
</style>

<script>
var tabContainer = document.querySelector('.tab-container');
var tabNavs = tabContainer.querySelectorAll('.tab-nav li');
var tabPanes = tabContainer.querySelectorAll('.tab-pane');
var timer = null;
var duration = 2000; // 定时器间隔
var cursor = 0; // 当前选中标签的索引

function start() {
  timer = setInterval(function() {
    tabNavs[cursor].classList.remove('active');
    tabPanes[cursor].classList.remove('active');

    cursor++;
    if (cursor >= tabNavs.length) {
      cursor = 0; // 循环
    }

    tabNavs[cursor].classList.add('active');
    tabPanes[cursor].classList.add('active');

    updateNavStatus(); // 更新prev和next的状态
  }, duration);
}

function stop() {
  clearInterval(timer);
}

start(); // 启动定时器

tabContainer.onmouseover = function() {
  stop();
}

tabContainer.onmouseout = function() {
  start();
}

function updateNavStatus() {
  if (cursor === 0) {
    tabNavs[tabNavs.length - 1].classList.add('disabled');
    tabNavs[cursor + 1].classList.remove('disabled');
  } else if (cursor === tabNavs.length - 1) {
    tabNavs[0].classList.remove('disabled');
    tabNavs[cursor - 1].classList.add('disabled');
  } else {
    tabNavs[cursor - 1].classList.add('disabled');
    tabNavs[cursor + 1].classList.remove('disabled');
  }
}
</script>

以上是DIV层tab切换的具体实现方式,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一个精简的JS DIV层tab切换代码 - Python技术站

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

相关文章

  • vue使用sass根据环境进行样式判断区分方式

    在Vue项目中,我们常常需要根据不同的环境(如生产环境和开发环境)来使用不同的样式。为了实现这个功能,我们可以使用Sass等CSS预处理工具。 以下是实现该功能的步骤: 创建不同的Sass文件 我们可以在项目中创建不同的Sass文件,如 “style.scss” 和 “style.production.scss”。前者针对开发环境,后者针对生产环境。 根据环…

    css 2023年6月9日
    00
  • CSS 中的 z-index 属性实例详解

    下面是“CSS 中的 z-index 属性实例详解”的完整攻略。 简介 在网页制作中,有时需要展现多个层,但是这些层有可能会重叠在一起,这时就需要用到 z-index 属性,它可以帮助我们设置元素的堆叠顺序。本文将详细介绍如何使用 z-index 属性。 基本语法 z-index 属性控制堆叠顺序,它的值决定了元素的层叠级别。 z-index 属性可以接收正…

    css 2023年6月10日
    00
  • 一文掌握CSS 属性display:flow-root声明

    下面是关于CSS属性display: flow-root的详细讲解。 什么是display: flow-root? display: flow-root 是 CSS3 中新增的一个属性值,它可以提供一个清除浮动(clearfix)的方式。它会创建一个新的块级格式化上下文,使得其内部浮动元素不会对外部元素造成影响,同时也不需要使用其他清除浮动的技巧。 如何使用…

    css 2023年6月10日
    00
  • ExtJS下grid的一些属性说明

    下面是关于ExtJS下grid的一些属性说明的详细攻略。 ExtJS下grid的一些属性说明 Grid是ExtJS中非常重要和强大的组件,它常常被用来显示数据列表信息。在使用Grid的时候,常用的配置属性有: 1. store Grid的数据存储对象。store可以是一个数组,也可以是一个实现了Store接口的对象,例如Ext.data.Store对象。 示…

    css 2023年6月10日
    00
  • 基于HTML5+CSS3实现简单的时钟效果

    让我详细讲解“基于HTML5+CSS3实现简单的时钟效果”的完整攻略。 实现思路 要实现一个简单的时钟效果,可以使用HTML5的<canvas>标签和CSS3的transform属性。 步骤如下: 在HTML文件中创建一个<canvas>标签,并设置它的宽、高和id,以便在JavaScript中操作它; 使用JavaScript获取当…

    css 2023年6月9日
    00
  • JS+CSS实现精美的二级导航效果代码

    下面就是讲解“JS+CSS实现精美的二级导航效果代码”的完整攻略,希望能对你有所帮助。 简介 在前端开发中,常见的网站二级导航效果是用户先点击顶部的一级导航,在鼠标悬停/点击时,顶部导航会下拉出一个垂直的下拉菜单,展示二级导航的内容,并在用户离开导航时收起下拉菜单。这种效果通常需要通过JS和CSS结合实现。 实现步骤 首先创建一个HTML页面,用ul和li标…

    css 2023年6月9日
    00
  • JS实现的N多简单无缝滚动代码(包含图文效果)

    下面我为你详细讲解如何实现JS的无缝滚动代码。 一、准备工作 在开始之前,我们需要准备以下材料: 一份文本编辑器,比如Sublime Text、VSCode等等; 用于展示滚动效果的HTML页面; JS代码文件。 二、步骤分解 下面我们将这个过程分解成几个步骤: 1.创建HTML页面 首先,我们需要创建一个HTML页面,用于展示我们的滚动效果。我们可以在页面…

    css 2023年6月10日
    00
  • vue项目中解决 IOS + H5 滑动边界橡皮筋弹性效果(解决思路)

    下面是对“vue项目中解决 IOS + H5 滑动边界橡皮筋弹性效果(解决思路)”的完整攻略。 1. 问题描述 在 iOS 设备中,在滑动屏幕时会有类似橡皮筋的弹性效果,这个特性不同于H5的默认滚动,为了让H5页面更具有类似 iOS 设备的滚动特性,我们需要实现这种橡皮筋弹性效果。 2. 解决思路 我们可以结合 Vue 中自定义指令和 better-scro…

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