点击按钮切换div及其内容(两种方法:Vue指令方式、原生DOM操作方式

简介: 点击按钮切换div及其内容(两种方法:Vue指令方式、原生DOM操作方式

案例效果:

2ca25b9ec73d4d5ca1b0929b6a8b6870.gif


方法一  使用vue框架的指令,方便高效(推荐,项目常用)

大致思路:


       v-for 指令通过数组遍历按钮,创建方法使用数组下标 index 来控制按钮的选中状态,index 为0时表示第一个按钮被选中,依次类推;


data 中设置变量 number 来表示点击后的值,与下标同步且只有点击后才会为 number 赋值;


       v-show 控制 div 的显示与隐藏,并将 v-show 后面的判断条件与数组下标 index 绑定,也就是使得下标为某个值时某个对应的 div 就显示,比如在此程序中 index 为1时,number == 1,则代表第二个 div 显示;


       : class 动态绑定样式,为按钮设置两个类名两种样式 .btn 和 .btn1,用于选中和未选中的区分,点击后 number 值等于下标值时该按钮高亮显示;


       完整代码如下:


<template>
  <div class="tab">
    <div class="content">
      <div style="margin: auto;width: 90%">
        <!--4个按钮-->
        <button :class="index == number ? 'btn1':'btn'" @click="tab(index)" v-for="(item ,index) in dataList"
                :key="index">{{item.option}}
        </button>
      </div>
      <!--4个div-->
      <div id="content1" v-show="number == 0">
        <span>Java语言:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。</span>
      </div>
      <div id="content2" v-show="number == 1">
        <span>C语言:C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。</span>
      </div>
      <div id="content3" v-show="number == 2">
        <span>JavaScript:是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。</span>
      </div>
      <div id="content4" v-show="number == 3">
        <span>PHP:是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。</span>
      </div>
    </div>
  </div>
</template>
<script>
  export default {
    name: "tab",
    data() {
      return {
        number: 0, //点击后的值,与下标同步,为0表示默认第一个按钮与div为选中状态
        dataList: [
          {option: 'Java'},
          {option: 'C+'},
          {option: 'JavaScript'},
          {option: 'PHP'},
        ]
      }
    },
    methods: {
      //定义切换方法
      tab(index) {
        this.number = index;
        // console.log(index, this.number);
      }
    }
  }
</script>
<style scoped lang="less">
  .content {
    width: 700px;
    margin: auto;
    /*按钮样式*/
    /*未选中时*/
    .btn {
      width: 150px;
      height: 40px;
      border: 0;
      border-radius: 5px;
      color: white;
      margin: 20px 3px;
      background-color: #35cc8f;
    }
    /*选中时*/
    .btn1 {
      width: 150px;
      height: 40px;
      border: 0;
      border-radius: 5px;
      color: white;
      margin: 20px 3px;
      background-color: #099941;
    }
    #content1, #content2, #content3, #content4 {
      background-color: #c1f8c9;
      height: 300px;
      font-size: 16px;
      line-height: 40px;
    }
  }
</style>

方法二  使用DOM操作(不推荐,了解即可)

       大致思路:


       为每个按钮设置点击事件并传值,通过switch方法来控制选中项,选中后用DOM操作获取对应的元素并设置对应的属性和样式;


       完整代码如下:


<template>
  <div class="tab">
    <div class="content">
      <div style="margin: auto;width: 90%">
        <!--4个按钮-->
        <button id="btn1" @click="tab(1)">Java</button>
        <button id="btn2" @click="tab(2)">C+</button>
        <button id="btn3" @click="tab(3)">JavaScript</button>
        <button id="btn4" @click="tab(4)">PHP</button>
      </div>
      <!--4个div-->
      <div id="content1"><span>Java语言:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。</span></div>
      <div id="content2"><span>C语言:C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。</span></div>
      <div id="content3"><span>JavaScript:是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。</span></div>
      <div id="content4"><span>PHP:是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。</span></div>
    </div>
  </div>
</template>
<script>
  export default {
    name: "tab",
    data() {
      return {
        lastBtn: 'btn1', //默认第一个按钮被选中
        lastContent: 'content1' //默认显示第一个div
      }
    },
    methods: {
      tab(num) {
        var a; //未选中时的按钮
        var a_content; //未选中时的div
        var b; //选中时的按钮
        var b_content; //选中时的div
        switch (num) {
          //选中的btn为#099941,选中的content为display:block
          case 1:
            a = document.getElementById(this.lastBtn);
            a.style.backgroundColor = '#35cc8f';
            b = document.getElementById('btn1');
            b.style.backgroundColor = '#099941';
            a_content = document.getElementById(this.lastContent);
            a_content.style.display = 'none';
            b_content = document.getElementById('content1');
            b_content.style.display = 'block';
            this.lastContent = 'content1';
            this.lastBtn = "btn1";
            break
          case 2:
            a = document.getElementById(this.lastBtn);
            a.style.backgroundColor = '#35cc8f';
            b = document.getElementById('btn2');
            b.style.backgroundColor = '#099941';
            a_content = document.getElementById(this.lastContent);
            a_content.style.display = 'none';
            b_content = document.getElementById('content2');
            b_content.style.display = 'block';
            this.lastContent = 'content2';
            this.lastBtn = "btn2";
            break;
          case 3:
            a = document.getElementById(this.lastBtn);
            a.style.backgroundColor = '#35cc8f';
            b = document.getElementById('btn3');
            b.style.backgroundColor = '#099941';
            a_content = document.getElementById(this.lastContent);
            a_content.style.display = 'none';
            b_content = document.getElementById('content3');
            b_content.style.display = 'block';
            this.lastContent = 'content3';
            this.lastBtn = "btn3";
            break;
          case 4:
            a = document.getElementById(this.lastBtn);
            a.style.backgroundColor = '#35cc8f';
            b = document.getElementById('btn4');
            b.style.backgroundColor = '#099941';
            a_content = document.getElementById(this.lastContent);
            a_content.style.display = 'none';
            b_content = document.getElementById('content4');
            b_content.style.display = 'block';
            this.lastContent = 'content4';
            this.lastBtn = "btn4";
            break;
        }
      }
    }
  }
</script>
<style scoped lang="less">
  .content {
    width: 700px;
    margin: auto;
    #btn1, #btn2, #btn3, #btn4 {
      width: 150px;
      height: 40px;
      border: 0;
      border-radius: 5px;
      color: white;
      margin-bottom: 20px;
    }
    #btn1 {
      background-color: #099941;
    }
    #btn2, #btn3, #btn4 {
      background-color: #35cc8f; /*除默认选中的第一个按钮高亮显示外,其余按钮默认为浅色*/
    }
    #content1, #content2, #content3, #content4 {
      background-color: #c1f8c9;
      height: 300px;
      font-size: 16px;
      line-height: 40px;
    }
    #content2, #content3, #content4 {
      display: none; /*除默认显示的第一个外,其余的全部隐藏且不占位*/
    }
  }
</style>

相关文章
|
1月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
25天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
38 5
|
2月前
|
缓存 编解码 JavaScript
DOM 和 BOM 在项目中应用时的性能优化方法
【10月更文挑战第19天】总之,优化 DOM 和 BOM 的性能需要综合考虑多个方面,通过合理的设计和技术手段,提升项目的运行效率和用户体验。在实际开发中,要不断地进行性能优化实践,以适应不断变化的需求和技术发展。
|
1月前
|
JavaScript 前端开发 API
|
2月前
|
JavaScript
在Vue中获取DOM元素的实际宽高
【10月更文挑战第2天】
327 1
|
3月前
|
JavaScript 前端开发
react字符串转为dom标签,类似于Vue中的v-html
本文介绍了在React中将字符串转换为DOM标签的方法,类似于Vue中的`v-html`指令,通过使用`dangerouslySetInnerHTML`属性实现。
106 0
react字符串转为dom标签,类似于Vue中的v-html
|
3月前
|
JavaScript
Vue3基础(十wu)___ref获取原生dom元素
本文介绍了Vue3中使用`ref`来获取和操作原生DOM元素的方法,通过示例展示了如何通过`.value`改变元素的样式。
55 0
Vue3基础(十wu)___ref获取原生dom元素
|
2月前
|
JavaScript 前端开发
DOM的概念?获取html元素的方法有哪些?
DOM的概念?获取html元素的方法有哪些?
36 0
|
4月前
|
移动开发 JavaScript 前端开发
【Vue面试题二十二】、什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
这篇文章深入探讨了虚拟DOM的概念、必要性以及在Vue中的实现方式,解释了虚拟DOM如何作为真实DOM的轻量级抽象,通过优化DOM操作提高性能,并实现跨平台渲染的能力。
【Vue面试题二十二】、什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
|
4月前
|
JavaScript 前端开发
DOM的概念?获取html元素的方法有哪些?
DOM的概念?获取html元素的方法有哪些?
45 0