一个精简的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日

相关文章

  • webpack里使用jquery.mCustomScrollbar插件的方法

    当在webpack中引入jquery.mCustomScrollbar插件时,需要进行一些特殊处理。以下是详细的步骤: 1. 安装jQuery和jQuery.mCustomScrollbar插件 首先,在项目中安装需要使用到的jQuery库和jQuery.mCustomScrollbar插件。可以通过npm安装,执行以下命令: npm install jqu…

    css 2023年6月10日
    00
  • 手机网页wap用Bootstrap还是jQuery Mobile

    当需要开发手机网页时,Bootstrap和jQuery Mobile都是常用的响应式前端框架。它们有很多相似之处,但也有一些不同点。在选择使用哪一个前端框架时,需要根据项目的需求和特点来选择。 Bootstrap vs jQuery Mobile Bootstrap Bootstrap是Twitter开发的前端框架,具有以下特点: 响应式设计:可以自适应不同…

    css 2023年6月11日
    00
  • css滤镜效果(二)

    关于“css滤镜效果(二)”的完整攻略,我会从以下几个方面进行讲解: 什么是CSS滤镜效果 CSS滤镜效果的分类 色彩调整类滤镜(Color Adjustment Filters) 几何变换类滤镜(Geometric Filters) 特效类滤镜(Visual Effects Filters) CSS滤镜效果的属性 filter filter:none 使用…

    css 2023年6月10日
    00
  • html工作中表格<tbody>标签的使用技巧

    当我们需要在Web页面中展示一些数据时,通常会使用表格(table)进行展示,而<tbody>标签则是定义表格的主体部分。下面是关于<tbody>标签使用技巧的攻略。 1. 什么是<tbody>标签 <tbody>标签用于定义表格的主体部分,通常在<table>标签内部使用。<tbody&gt…

    css 2023年6月10日
    00
  • media type(媒体类型)与media query(媒体查询)简介及使用方法介绍

    媒体类型和媒体查询是用于响应式设计的重要概念,可以让我们根据设备的屏幕宽度和其他条件来修改网页的样式和布局。下面是媒体类型和媒体查询的详细介绍及使用方法: 媒体类型(Media Type) 媒体类型是用来描述文档呈现特定媒体类型的方式,比如打印机、屏幕、手持设备等。我们可以通过使用媒体查询为不同媒体类型的设备设置不同的样式。 在CSS中,使用@media规则…

    css 2023年6月10日
    00
  • box-shadow单边阴影的实现

    Box-shadow 可以在多种情况下为元素添加阴影效果,包括单边阴影。单边阴影可以为元素添加美观的高亮或深度感。 下面是实现单边阴影的完整攻略: 使用 box-shadow 和 inset 属性 在元素上添加 box-shadow 属性,并使用 inset 属性,可以创建单边阴影。inset 属性指定阴影显示在元素内部,而不是在元素周围。 .shadow …

    css 2023年6月10日
    00
  • 深入理解bootstrap框架之入门准备

    下面是“深入理解Bootstrap框架之入门准备”的完整攻略: 一、什么是Bootstrap Bootstrap是Twitter公司的一个前端开发框架,基于HTML,CSS和JS,用于开发响应式布局、移动设备优先的网站。 二、为什么要使用Bootstrap 使用Bootstrap可以使开发者在开发网站时,只需使用少量的CSS和JS便可构建各种复杂的UI组件,…

    css 2023年6月9日
    00
  • 教你一招解决vue页面自适应布局

    针对vue页面自适应布局的问题,下面是我总结的完整攻略: 1. 使用flex布局 flex布局是一种强大的布局方式,它可以让我们轻松实现responsive design,也就是响应式页面设计。具体实现方法如下: 1.1 在父元素上设置display:flex 在父元素上使用display:flex,可以使该元素成为一个flex容器。如下所示: .conta…

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