js实现简单选项卡制作

下面是详细的 js 实现简单选项卡制作攻略:

选项卡制作的实现原理

选项卡是一种可以切换不同内容的功能组件,一般实现选项卡的方式主要是通过CSS控制各个选项卡的显示和隐藏,并通过JS实现点击切换选项卡的功能。大致的实现过程如下:

  1. 选项卡的标题切换: 点击不同的标题,显示对应的内容。一般使用事件委托的方式来绑定点击事件。
  2. 选项卡内容的显示和隐藏:通过CSS控制各个选项卡内容的display属性来控制显示和隐藏。

实现步骤

HTML结构

在 HTML 结构中需要定义选项卡的标题和内容部分。一般情况下会将它们放到一个容器元素中,例如<div class="tab-container">:

<div class="tab-container">
    <ul class="tab-nav">
        <li class="active">Tab 1</li>
        <li>Tab 2</li>
        <li>Tab 3</li>
    </ul>
    <div class="tab-content">
        <div class="active">Content 1</div>
        <div>Content 2</div>
        <div>Content 3</div>
    </div>
</div>

tab-nav是选项卡标题的容器,tab-content则是选项卡内容的容器,active表示选项卡当前处于激活状态。在默认情况下,第一个选项卡以及对应的内容处于激活状态。

CSS样式

通过CSS样式来控制选项卡的布局和样式,使得选项卡更易于使用和调整。

.tab-container {
    overflow: hidden;
    position: relative;
}

.tab-nav {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.tab-nav li {
    cursor: pointer;
    padding: 10px;
    font-size: 16px;
    font-weight: bold;
}

.tab-nav li.active {
    background-color: #ccc;
}

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

.tab-content > div.active {
    display: block;
}

JS代码

  1. 选项卡标题切换:通过事件委托绑定点击事件。
// 获取选项卡标题元素
const tabNav = document.querySelector('.tab-nav');

// 绑定点击事件
tabNav.addEventListener('click', e => {
    // 获取被点击的选项卡标题元素
    const target = e.target;

    if (target.tagName === 'LI') {
        // 清除所有选项卡标题的激活状态
        const tabNavItems = document.querySelectorAll('.tab-nav li');
        tabNavItems.forEach(item => {
            item.classList.remove('active');
        });

        // 设置被点击的选项卡标题为激活状态
        target.classList.add('active');

        // 切换选项卡内容
        changeTab(target.dataset.index);
    }
});

这段代码首先获取了所有的选项卡标题元素,通过事件委托的方式绑定点击事件。这里通过判断事件源元素是否为选项卡标题元素(即li),从而确定是否执行具体的点击事件。在点击事件中,首先清除所有选项卡标题元素的激活状态,然后将被点击的选项卡标题元素设置为激活状态。最后调用changeTab函数切换选项卡内容。

  1. 选项卡内容的切换: 根据选项卡标题的索引值获取对应的选项卡内容并设置为激活状态。
function changeTab(index) {
    // 获取所有选项卡内容元素
    const tabContents = document.querySelectorAll('.tab-content > div');

    // 清除所有选项卡内容的激活状态
    tabContents.forEach(content => {
        content.classList.remove('active');
    });

    // 设置对应的选项卡内容为激活状态
    const targetTabContent = tabContents[index];
    targetTabContent.classList.add('active');
}

这段代码通过changeTab函数完成对选项卡内容的切换。首先获取所有选项卡内容元素,然后清除它们的激活状态。接着获取被点击的选项卡标题对应的索引值,用于获取对应的选项卡内容并将其设置为激活状态。

示例说明

以下是两个关于选项卡实现的示例说明:

示例一

在这个例子中,我们展现了一个选项卡的布局样式,包括选项卡标题和对应的内容。

<div class="tab-container">
    <ul class="tab-nav">
        <li class="active" data-index="0">Tab 1</li>
        <li data-index="1">Tab 2</li>
        <li data-index="2">Tab 3</li>
    </ul>
    <div class="tab-content">
        <div class="active">Content 1</div>
        <div>Content 2</div>
        <div>Content 3</div>
    </div>
</div>
.tab-container {
    overflow: hidden;
    position: relative;
}

.tab-nav {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.tab-nav li {
    cursor: pointer;
    padding: 10px;
    font-size: 16px;
    font-weight: bold;
}

.tab-nav li.active {
    background-color: #ccc;
}

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

.tab-content > div.active {
    display: block;
}
// 获取选项卡标题元素
const tabNav = document.querySelector('.tab-nav');

// 绑定点击事件
tabNav.addEventListener('click', e => {
    // 获取被点击的选项卡标题元素
    const target = e.target;

    if (target.tagName === 'LI') {
        // 清除所有选项卡标题的激活状态
        const tabNavItems = document.querySelectorAll('.tab-nav li');
        tabNavItems.forEach(item => {
            item.classList.remove('active');
        });

        // 设置被点击的选项卡标题为激活状态
        target.classList.add('active');

        // 切换选项卡内容
        changeTab(target.dataset.index);
    }
});

function changeTab(index) {
    // 获取所有选项卡内容元素
    const tabContents = document.querySelectorAll('.tab-content > div');

    // 清除所有选项卡内容的激活状态
    tabContents.forEach(content => {
        content.classList.remove('active');
    });

    // 设置对应的选项卡内容为激活状态
    const targetTabContent = tabContents[index];
    targetTabContent.classList.add('active');
}

示例二

下面是项目中选项卡的实现,选项卡内容是项目进度的不同阶段。

<div class="tab-container">
    <ul class="tab-nav">
        <li class="active" data-index="0">阶段一</li>
        <li data-index="1">阶段二</li>
        <li data-index="2">阶段三</li>
        <li data-index="3">阶段四</li>
        <li data-index="4">阶段五</li>
    </ul>
    <div class="tab-content">
        <div class="active">
            <h5>组队申请</h5>
            <p>参加活动的战友们首先需要组队申请</p>
        </div>
        <div>
            <h5>项目策划</h5>
            <p>完成阶段一后,您可以开始进行项目策划</p>
        </div>
        <div>
            <h5>形象设计</h5>
            <p>设计专家将会根据您的特点来为您量身打造设计方案 </p>
        </div>
        <div>
            <h5>产品研发</h5>
            <p>经验丰富的研发团队将会为您成功开发产品 ,并不断优化</p>
        </div>
        <div>
            <h5>售后服务</h5>
            <p>您在使用过程中遇到任何问题,我们将在第一时间内进行为您解决</p>
        </div>
    </div>
</div>
.tab-container {
    overflow: hidden;
    position: relative;
}

.tab-nav {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    justify-content: space-around;
}

.tab-nav li {
    cursor: pointer;
    padding: 10px;
    font-size: 16px;
}

.tab-nav li.active {
    border-bottom: 3px solid #0099ff;
}

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

.tab-content > div.active {
    display: block;
    padding-top: 0;
}
// 获取选项卡标题元素
const tabNav = document.querySelector('.tab-nav');

// 绑定点击事件
tabNav.addEventListener('click', e => {
    // 获取被点击的选项卡标题元素
    const target = e.target;

    if (target.tagName === 'LI') {
        // 清除所有选项卡标题的激活状态
        const tabNavItems = document.querySelectorAll('.tab-nav li');
        tabNavItems.forEach(item => {
            item.classList.remove('active');
        });

        // 设置被点击的选项卡标题为激活状态
        target.classList.add('active');

        // 切换选项卡内容
        changeTab(target.dataset.index);
    }
});

function changeTab(index) {
    // 获取所有选项卡内容元素
    const tabContents = document.querySelectorAll('.tab-content > div');

    // 清除所有选项卡内容的激活状态
    tabContents.forEach(content => {
        content.classList.remove('active');
    });

    // 设置对应的选项卡内容为激活状态
    const targetTabContent = tabContents[index];
    targetTabContent.classList.add('active');
}

这个选项卡的应用比较广泛,我们可以用于主页的各个导航页面的展示。用户可以通过选项卡简单直观地了解各个项目的具体情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现简单选项卡制作 - Python技术站

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

相关文章

  • js cavans实现静态滚动弹幕

    1. 简介 Cavans 是 HTML5 新增的元素,它可以让开发者在浏览器上绘制图形、动画等。本篇攻略讲解如何使用 Canvas 实现静态的滚动弹幕。 2. 准备工作 为了使用 Canvas 实现滚动弹幕,需要先在 HTML 中添加一个 Canvas 元素。以下是添加 Canvas 元素的示例代码: <canvas id="myCanvas…

    css 2023年6月11日
    00
  • 老生常谈css中float的用法

    下面是一个详细讲解“老生常谈css中float的用法”的攻略。 什么是float float 是 CSS 属性,它可以让元素“浮动”到其容器的左侧或右侧。当一个元素设置了 float 属性后,它就会向左或向右移动,直到碰到父容器或另一个浮动元素的边缘为止。 float 的具体用法 float 一般用于实现元素的排列效果,比如实现多栏、悬浮菜单、悬浮图片等。 …

    css 2023年6月10日
    00
  • CSS3中Animation属性的使用详解

    CSS3中Animation属性的使用详解 CSS3中的Animation属性可以用来创建动画效果,通过设置关键帧和动画属性,可以实现各种各样的动画效果。本攻略将详细讲解Animation属性的使用方法,包括关键帧的设置、动画属性的设置、动画的应用等,并提供两个示例说明。 1. 关键帧的设置 关键帧是指动画中的关键点,可以通过设置关键帧来控制动画的变化。在C…

    css 2023年5月18日
    00
  • CSS实现鼠标移动到图片或按钮上改变大小的方法示例

    CSS实现鼠标移动到图片或按钮上改变大小的方法可以通过CSS属性transform实现。transform属性可以实现元素的缩放、旋转、平移和倾斜等效果,而对于本问题的实现,我们利用transform的scale功能来实现鼠标移动到图片或按钮上改变大小的需求。 具体实现方法如下: 利用:hover伪类和transform属性的scale功能实现 我们可以通过…

    css 2023年6月10日
    00
  • IE下使用form时所在行被撑高的解决方法

    IE浏览器在渲染form表单元素时,可能会出现表单所在行被撑高的现象,这主要是由于IE会为表单自动添加display: inline-block;的样式导致的。下面提供两种解决方式,以便在IE中使用form表单元素不会影响页面布局。 方式一:使用vertical-align 将form表单元素和其所在的元素都设置为vertical-align: top;的样…

    css 2023年6月9日
    00
  • SpringBoot+Thymeleaf静态资源的映射规则说明

    首先,我们需要了解 Spring Boot 和 Thymeleaf 都是 web 开发的常用工具,而静态资源的映射规则是很重要的一部分。 静态资源包括图片、CSS、JavaScript 等文件,是可以直接被客户端获取的资源文件。在 Spring Boot + Thymeleaf 的项目中,我们通常在 src/main/resources/static 目录下…

    css 2023年6月10日
    00
  • 详解CSS-opacity子元素继承父元素透明度的解决方法

    下面是详解 “CSS-opacity子元素继承父元素透明度的解决方法” 的攻略。 什么是 CSS-opacity? 在 CSS 中,opacity 属性指定元素的透明度,即元素的不透明度程度。该属性的值介于 0(完全透明) 和 1(完全不透明)之间。例如,设置一个元素的 opacity 为 0.5,那么这个元素会半透明显示。 想象一个问题 当一个元素设置了 …

    css 2023年6月10日
    00
  • Ueditor百度编辑器的Html模式自动替换样式的解决方法

    Ueditor是一款功能强大的富文本编辑器,在前端项目的开发中广泛使用。然而,使用Ueditor时我们可能会遇到一个问题,那就是在Html模式下输入内容时会自动替换样式,这会导致一些不必要的麻烦。下面我将为您提供解决这个问题的完整攻略。 问题描述 在使用Ueditor编辑器的Html模式下,输入内容时,会自动替换掉一些已经存在的样式,而这些样式很有可能是我们…

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