原生JS动态实现tab

html代码:

<div id="root"></div>

JS代码

const tab = [{
      id: 1,
      name: '苹果'
    },
    {
      id: 2,
      name: '香蕉'
    },
    {
      id: 3,
      name: '梨'
    },
  ]
  let root = document.getElementById('root')

  function getdata(tab, num) {
    tab.map((e, i) => {
      let pNode = num == i ? '<p class="p color active" ' + ' id=' + i + '>' + e.name + '</p>' :
        '<p class="p color" ' + 'id=' + i + '>' + e.name + '</p>'
      root.innerHTML += pNode
    })
  }

  function getClick() {
    let pArr = document.getElementsByTagName('p')
    root.addEventListener('click', (e) => {
      for (let i = 0; i < pArr.length; i++) {
        if (e.target.id == i) {
          console.log(i);
          pArr[i].className += ' active'
        } else {
          pArr[i].classList.remove('active')
        }
      }
    })
  }
  getdata(tab, 0)
  getClick()

CSS样式

    #root {
      display: flex;

    }

    .p {
      width: 80px;
      height: 40px;
      line-height: 40px;
      border: 1px solid paleturquoise;
      text-align: center;
      margin-right: 10px;
      cursor: pointer;
    }

    .color {
      background-color: pink;
    }

    .active {
      background-color: red !important;
    }

效果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的例子: HTML: ```html <div class="tab"> <button class="tablinks" onclick="openTab(event, 'tab1')">Tab 1</button> <button class="tablinks" onclick="openTab(event, 'tab2')">Tab 2</button> <button class="tablinks" onclick="openTab(event, 'tab3')">Tab 3</button> </div> <div id="tab1" class="tabcontent"> <h3>Tab 1 Content</h3> <p>Some text...</p> </div> <div id="tab2" class="tabcontent"> <h3>Tab 2 Content</h3> <p>Some text...</p> </div> <div id="tab3" class="tabcontent"> <h3>Tab 3 Content</h3> <p>Some text...</p> </div> ``` CSS: ```css /* 隐藏所有tab内容 */ .tabcontent { display: none; } /* 标签页按钮样式 */ .tab button { background-color: #eee; border: none; color: black; padding: 10px 20px; cursor: pointer; } /* 激活的标签页按钮样式 */ .tab button.active { background-color: #ccc; } /* 标签页内容样式 */ .tabcontent { padding: 20px; border: 1px solid #ccc; } /* 第一个标签页默认显示 */ #tab1 { display: block; } ``` JavaScript: ```javascript function openTab(event, tabName) { // 获取所有的 tab 内容 var tabcontent = document.getElementsByClassName("tabcontent"); // 隐藏所有的 tab 内容 for (var i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; } // 获取所有的 tab 按钮 var tablinks = document.getElementsByClassName("tablinks"); // 将所有的 tab 按钮样式设置为非激活状态 for (var i = 0; i < tablinks.length; i++) { tablinks[i].className = tablinks[i].className.replace(" active", ""); } // 显示当前选中的 tab 内容 document.getElementById(tabName).style.display = "block"; // 设置当前选中的 tab 按钮为激活状态 event.currentTarget.className += " active"; } ``` 当用户点击任意一个标签页按钮时,`openTab`函数会被调用,隐藏所有标签页内容,将当前标签页内容设置为显示状态,同时将当前标签页按钮样式设置为激活状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值