簡體   English   中英

vanilla javascript中的自動選項卡切換

[英]Automatic tab switch in vanilla javascript

我用 Javascript 構建了一個標簽系統。 手動它工作正常,但我希望它自動工作。 我想要一個無限循環,我以 6 秒的間隔遍歷每個選項卡,然后再次從選項卡的開頭開始。 當用戶點擊一個標簽時,這個循環應該停止。

我已經搜索了解決方案,但找不到任何適用於 vanilla javascript 的內容或不明白(我是個大佬)。 大多數解決方案都可以在 jquery 中使用。 但我只想要 javascript。

這是這個問題的代碼筆

這是示例 Html 代碼

<div id="tabs-id">
  <ul>
    <li>
      <a onclick="changeAtiveTab(event,'tab1')"> Tab 1 </a>
    </li>
    <li>
      <a onclick="changeAtiveTab(event,'tab2')"> Tab 2 </a>
    </li>
    <li>
      <a onclick="changeAtiveTab(event,'tab3')"> Tab 3 </a>
    </li>
    <li>
      <a onclick="changeAtiveTab(event,'tab4')"> Tab 4 </a>
    </li>
  </ul>
</div>
<div class="tab-content tab-space">
  <div class="block" id="tab1">
    <div class="container">Tab 1 content</div>
  </div>
  <div class="hidden" id="tab2">
    <div class="container">Tab 2 content</div>
  </div>
  <div class="hidden" id="tab3">
    <div class="container">Tab 3 content</div>
  </div>
  <div class="hidden" id="tab4">
    <div class="container">Tab 4 content</div>
  </div>
</div>

和 Javascript

function changeAtiveTab(event, tabID) {
  let element = event.target;
  while (element.nodeName !== "A") {
    element = element.parentNode;
  }
  ulElement = element.parentNode.parentNode;
  aElements = ulElement.querySelectorAll("li > a");
 
  tabContents = document
    .getElementById("tabs-id")
    .querySelectorAll(".tab-content > div");
  for (let i = 0; i < aElements.length; i++) {
    aElements[i].classList.remove("border-t-4");
    aElements[i].classList.remove("font-bold");
    tabContents[i].classList.add("hidden");
    tabContents[i].classList.remove("block");
  }

  element.classList.add("border-t-4");
  element.classList.add("font-bold");
  
  document.getElementById(tabID).classList.remove("hidden");
  document.getElementById(tabID).classList.add("block");
}

您可以在此處使用我的Interval Generator (又名Async Loop ,對您的代碼進行一些小的更改(在全頁視圖中打開以顯示選項卡按鈕):

 const container = document.querySelector('#tabs-id') const ulElement = container.querySelector('ul') const aElements = ulElement.querySelectorAll("li > a"); const tabs = container.querySelectorAll('.tab-content > div') function changeAtiveTab(index) { for (let i = 0; i < aElements.length; i++) { aElements[i].classList.remove("border-t-4"); aElements[i].classList.remove("font-bold"); tabs[i].classList.add("hidden"); tabs[i].classList.remove("block"); } aElements[index].classList.add("border-t-4"); aElements[index].classList.add("font-bold"); tabs[index].classList.remove("hidden"); tabs[index].classList.add("block"); } const generator = (function* logger() { while (true) { for (let index = 0; index < aElements.length; index++) { changeAtiveTab(index) yield } } })() const interval = setInterval(() => generator.next(), 4000) for (let i = 0; i < aElements.length; i++) aElements[i].addEventListener('click', () => { clearInterval(interval) changeAtiveTab(i) })
 <html> <head> <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet"> </head> <body> <div class="flex flex-wrap" id="tabs-id"> <div class="w-full"> <div class="hidden md:block"> <ul class="flex w-3/4 mb-0 list-none flex-wrap mx-auto pt-3 pb-4 flex-row "> <li class="-mb-px last:mr-0 flex-auto text-center"> <a class="text-sm block pt-5 cursor-pointer leading-normal font-bold border-t-4 border-t-2"> Tab 1 </a> </li> <li class="-mb-px last:mr-0 flex-auto text-center"> <a class="text-sm block pt-5 cursor-pointer leading-normal border-t-2"> Tab 2 </a> </li> <li class="-mb-px last:mr-0 flex-auto text-center"> <a class="text-sm block pt-5 cursor-pointer leading-normal border-t-2"> Tab 3 </a> </li> <li class="-mb-px last:mr-0 flex-auto text-center"> <a class="text-sm block pt-5 cursor-pointer leading-normal border-t-2"> Tab 4 </a> </li> </ul> </div> <div class="relative flex flex-col min-w-0 break-words bg-white w-full "> <div class=" py-5 flex-auto"> <div class="tab-content tab-space"> <div class="block"> <div class="container mx-auto w-2/4 bg-red-300 p-20"></div> </div> <div class="hidden"> <div class="container mx-auto w-2/4 bg-pink-300 p-20"> </div> </div> <div class="hidden"> <div class="container mx-auto w-2/4 bg-blue-300 p-20"> </div> </div> <div class="hidden"> <div class="container mx-auto w-2/4 bg-green-300 p-20"> </div> </div> </div> </div> </div> </div> </div> </body> </html>

CodePen試試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM