javascript 定时自动切换的选项卡Tab

yizhihongxing

为了详细讲解“javascript 定时自动切换的选项卡Tab”的完整攻略,我们先来了解一下什么是选项卡Tab。

什么是选项卡Tab

选项卡(Tabs)是一种常见的网站导航方式,能够让用户快速切换不同的内容。选项卡通常用于展示多个内容,每个选项卡对应内容不同,用户可以通过点击选项卡标签来快速切换内容。

实现自动切换的选项卡Tab

实现自动切换的选项卡有多种方式,其中比较常见的方式是使用JavaScript定时器实现自动切换。在JavaScript中,我们可以使用setInterval函数定时调用函数,从而达到定期执行任务的目的。下面是一个简单实现选项卡自动切换的demo:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>定时自动切换的选项卡Tab实现</title>
    <style>
      .tab {
        display: none;
      }
      .active {
        display: block;
      }
    </style>
  </head>
  <body>
    <ul>
      <li class="tab-btn active" data-target="tab1">选项卡1</li>
      <li class="tab-btn" data-target="tab2">选项卡2</li>
      <li class="tab-btn" data-target="tab3">选项卡3</li>
    </ul>
    <div class="tab-content">
      <div class="tab active" data-tab="tab1">选项卡1的内容</div>
      <div class="tab" data-tab="tab2">选项卡2的内容</div>
      <div class="tab" data-tab="tab3">选项卡3的内容</div>
    </div>    
    <script>
      var tabBtns = document.querySelectorAll('.tab-btn');
      var tabs = document.querySelectorAll('.tab');
      var index = 0;
      var intervalId = setInterval(function(){
        index = (index + 1) % tabBtns.length;
        setActiveTab(index)
      }, 2000);

      function setActiveTab(index) {
        for(var i = 0; i < tabs.length; i++) {
          if(i === index){
            tabs[i].classList.add('active');
            tabBtns[i].classList.add('active');
          } else {
            tabs[i].classList.remove('active');
            tabBtns[i].classList.remove('active');
          }
        }
      }

      for(var i = 0; i < tabBtns.length; i++) {
        tabBtns[i].addEventListener('click', function(evt){
          var targetId = evt.target.dataset.target;
          for(var i = 0; i < tabs.length; i++) {
            if(tabs[i].dataset.tab === targetId) {
              setActiveTab(i);
              clearInterval(intervalId);
              intervalId = setInterval(function(){
                index = (index + 1) % tabBtns.length;
                setActiveTab(index)
              }, 2000);             
              break;
            }
          }
        });
      }
    </script>
  </body>
</html>

以上是一个使用JavaScript实现自动切换的选项卡的完整示例。在这个示例中,我们使用了setInterval函数每隔2秒自动切换选项卡。同时,这个示例还允许用户手动点击切换选项卡,当用户手动切换时,定时器将被清除,等待用户操作完成后重新激活。

示范说明

为了更好地展示这个自动切换的选项卡示例的使用场景,我们可以在它基础上实现两个不同的需求:

例1:自动切换轮播图

下面是一个使用自动切换的选项卡实现自动切换轮播图的演示:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>自动切换轮播图</title>
    <style>
      .tab-img {
        display: none;
      }
      .active {
        display: block;
      }
      .tab-container {
        position: relative;
        width: 500px;
        height: 300px;
        margin: 0 auto;
      }
      .tab-nav {
        position: absolute;
        bottom: 0;
        left: 50%;
        transform: translateX(-50%);
        list-style: none;
        margin: 0;
        padding: 0;
      }
      .tab-nav li {
        display: inline-block;
        margin-right: 12px;
      }
      .tab-nav li:last-child {
        margin-right: 0;
      }
      .tab-nav a {
        display: block;
        width: 16px;
        height: 16px;
        background-color: #1abc9c;
        border-radius: 50%;
        text-indent: -9999px;
      }
      .tab-nav a.active {
        background-color: #3498db;
      }
      .tab-prev, .tab-next {
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        font-size: 24px;
        z-index: 1;
        color: #fff;
        cursor: pointer;
        opacity: 0.8;
      }
      .tab-prev {
        left: 0;
      }
      .tab-next {
        right: 0;
      }
      .tab-run {
        position: absolute;
        width: 100%;
        height: 100%;
        z-index: 2;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <div class="tab-container">
      <div class="tab-content">
        <img class="tab-img active" data-tab="tab1" src="http://placehold.it/500x300/2980b9/ffffff?text=tab1">
        <img class="tab-img" data-tab="tab2" src="http://placehold.it/500x300/2ecc71/ffffff?text=tab2">
        <img class="tab-img" data-tab="tab3" src="http://placehold.it/500x300/f1c40f/ffffff?text=tab3">
        <img class="tab-img" data-tab="tab4" src="http://placehold.it/500x300/e74c3c/ffffff?text=tab4">
      </div>   
      <ul class="tab-nav">
        <li><a class="active" href="#" data-target="tab1">1</a></li>
        <li><a href="#" data-target="tab2">2</a></li>
        <li><a href="#" data-target="tab3">3</a></li>
        <li><a href="#" data-target="tab4">4</a></li>
      </ul> 
      <div class="tab-prev">&#10094;</div>
      <div class="tab-next">&#10095;</div>
      <div class="tab-run"></div>
    </div>
    <script>
      var tabNav = document.querySelectorAll('.tab-nav a');
      var tabImgs = document.querySelectorAll('.tab-img');
      var tabBtnPrev = document.querySelector('.tab-prev');
      var tabBtnNext = document.querySelector('.tab-next');
      var tabRun = document.querySelector('.tab-run');
      var index = 0;
      var intervalId = setInterval(function(){
        index = (index + 1) % tabNav.length;
        setActiveTab(index)
      }, 3000);

      function setActiveTab(index) {
        for(var i = 0; i < tabImgs.length; i++) {
          if(i === index){
            tabImgs[i].classList.add('active');
            tabNav[i].classList.add('active');
          } else {
            tabImgs[i].classList.remove('active');
            tabNav[i].classList.remove('active');
          }
        }
      }

      for(var i = 0; i < tabNav.length; i++) {
        tabNav[i].addEventListener('click', function(evt){
          var targetId = evt.target.dataset.target;
          for(var i = 0; i < tabImgs.length; i++) {
            if(tabImgs[i].dataset.tab === targetId) {
              setActiveTab(i);
              clearInterval(intervalId);
              intervalId = setInterval(function(){
                index = (index + 1) % tabNav.length;
                setActiveTab(index)
              }, 3000);             
              break;
            }
          }
        });
      }

      tabBtnPrev.addEventListener('click', function(){
        index = (index - 1 + tabNav.length) % tabNav.length;
        setActiveTab(index);
      });

      tabBtnNext.addEventListener('click', function(){
        index = (index + 1) % tabNav.length;
        setActiveTab(index);
      });

      tabRun.addEventListener('mouseenter', function(){
        clearInterval(intervalId);
      });

      tabRun.addEventListener('mouseleave', function(){
        intervalId = setInterval(function(){
          index = (index + 1) % tabNav.length;
          setActiveTab(index)
        }, 3000);
      });
    </script>
  </body>
</html>

在这个来源于选项卡的自动切换演示中,我们以轮播图的形式展示了多个图片,自动循环播放,用户也可以手动进行上下翻页操作。

例2:自动切换新闻列表

下面是一个用自动切换的选项卡实现自动切换新闻列表的演示:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>自动切换新闻列表</title>
    <style>
        .active {
            color: #f00;
        }
        ul.news {
            list-style: none;
            padding: 0;
        }
        ul.news li {
            line-height: 30px;
        }
    </style>
  </head>
  <body>
    <ul class="news">
      <li class="active">新闻1</li>
      <li>新闻2</li>
      <li>新闻3</li>
      <li>新闻4</li>
      <li>新闻5</li>
    </ul>
    <script>
      var newsList = document.querySelector('.news');
      var newsItems = document.querySelectorAll('.news li');
      var index = 0;
      var intervalId = setInterval(function(){
        index = (index + 1) % newsItems.length;
        setActiveTab(index)
      }, 2000);

      function setActiveTab(index) {
        for(var i = 0; i < newsItems.length; i++) {
          if(i === index){
            newsItems[i].classList.add('active');
          } else {
            newsItems[i].classList.remove('active');
          }
        }
      }    
    </script>
  </body>
</html>

以上示例是一个简单的自动切换新闻列表的demo,每隔2秒自动切换到下一条新闻,用户也可以手动点击切换。在实际开发过程中,我们可以把这个简单的demo拓展成一个更加完整的新闻内容展示界面。

总之,基于选项卡的JavaScript自动切换效果可以应用于很多不同的场景,需要根据实际需求进行具体实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript 定时自动切换的选项卡Tab - Python技术站

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

相关文章

  • node基于async/await对mysql进行封装

    请看下方的完整攻略: 什么是异步/等待(async/await) 异步/等待(async/await)是一种用于处理异步操作的编程模式。在传统的回调函数或者Promise对象中,我们需要使用多个then语句来处理异步任务返回的结果。而使用async/await的方式可以让我们以同步代码的方式来处理异步任务。它可以让我们的代码更加的简单、清晰。 node基于a…

    node js 2023年6月8日
    00
  • JavaScript库urlcat 之URL构建器库

    下面是关于 JavaScript 库 urlcat 之 URL 构建器库的完整攻略。 简介 urlcat 是一个 URL 构建器库,它可以帮助开发者更方便、更快速地构建 URL,支持多种常见的 URL 场景,比如拼接 URL、替换 URL 中的参数等。urlcat 库的 Github 仓库地址为 https://github.com/interledgerj…

    node js 2023年6月8日
    00
  • 使用nodejs实现JSON文件自动转Excel的工具(推荐)

    使用Node.js实现JSON文件自动转Excel的工具是一件非常实用的任务。下面是详细的攻略: 1. 准备工作:安装相关工具 在开始处理工具的制作之前,要先安装相关的工具: Node.js:在开始使用Node.js之前,需要先安装Node.js(https://nodejs.org/en/)。Node.js是一个JavaScript的运行环境,可以在服务器…

    node js 2023年6月8日
    00
  • ChatGPT 中文调教指南总结

    ChatGPT 中文调教指南总结 ChatGPT是一款基于GPT-2算法的开源聊天机器人模型,可以用于快速搭建自己的聊天机器人应用。本文将详细介绍如何使用ChatGPT进行中文调教的具体步骤和详细注意事项。 步骤一:数据收集 在进行ChatGPT中文调教前,需首先采集一定的中文对话语料作为训练数据,数据量不宜过少。可从网络搜索引擎、社交媒体、论坛等社交网络中…

    node js 2023年6月8日
    00
  • 用js简单提供增删改查接口

    下面就是用JS简单提供增删改查接口的完整攻略: 什么是增删改查接口 增删改查接口,英文名CRUD(C:Create R:Retrieve U:Update D:Delete),是Web前端开发中最常用的基本操作之一,用于实现数据的增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)等操作。而JS简单提供增删改查接口,就是…

    node js 2023年6月8日
    00
  • node+axios实现服务端文件上传示例

    下面是针对使用node和axios实现服务端文件上传的完整攻略。 1. 安装依赖 在开始代码实现之前,需要先安装一些必要的依赖包。这里我们需要下载express、body-parser和multer这三个包。其中,express用来搭建服务器,body-parser用于解析POST请求中的body,multer用于处理文件上传。 npm install ex…

    node js 2023年6月8日
    00
  • node.js多个异步过程中判断执行是否完成的解决方案

    在node.js中,异步操作非常常见,实现异步操作的方法有很多,比如回调函数、Promise、async/await等。但是在多个异步过程中判断执行是否完成时,会遇到一些问题。本文将详细讲述node.js中多个异步过程中判断执行是否完成的解决方案。 问题 在多个异步过程中判断执行是否完成的问题,可以用以下示例来说明。假设我们有3个异步函数需要执行,分别是: …

    node js 2023年6月8日
    00
  • nodeJs爬虫获取数据简单实现代码

    下面是关于“nodeJs爬虫获取数据简单实现代码”的完整攻略。 1. 前言 在讲解具体实现方法之前,我们需要了解一下什么是爬虫及其应用场景。 1.1 什么是爬虫 爬虫是指按照一定的规则自动从互联网上抓取信息的程序,也称网络爬虫、网络机器人。其工作模式基本上类似于人工去浏览网页,寻找信息,但爬虫可以在很短时间内处理大量信息。 1.2 爬虫的应用场景 在互联网上…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部