Закрытие вкладок при нажатии

Я пытаюсь создать функцию вкладок на своем веб-сайте, и я хотел бы, чтобы эти вкладки реагировали. Итак, я сделал такой код:

function openCity(evt, cityName) {
    var i, tabcontent, tablinks;
    tabcontent = document.getElementsByClassName("tabcontent");
    for (i = 0; i < tabcontent.length; i++) {
        tabcontent[i].style.display = "none";
    }
    tablinks = document.getElementsByClassName("tablinks");
    for (i = 0; i < tablinks.length; i++) {
        tablinks[i].className = tablinks[i].className.replace(" active", "");
    }
    document.getElementById(cityName).style.display = "block";
    evt.currentTarget.className += " active";
}

// Get the element with id = "defaultOpen" and click on it
document.getElementById("defaultOpen").click();
/* Style the tab */
.tab {
    overflow: hidden;
    border: 1px solid #ccc;
    background-color: #f1f1f1;
}

/* Style the buttons inside the tab */
.tab button {
    background-color: inherit;
    float: left;
    border: none;
    outline: none;
    cursor: pointer;
    padding: 14px 16px;
    transition: 0.3s;
    font-size: 17px;
}

/* Change background color of buttons on hover */
.tab button:hover {
    background-color: #ddd;
}

/* Create an active/current tablink class */
.tab button.active {
    background-color: #ccc;
}

/* Style the tab content */
.tabcontent {
    display: none;
    padding: 6px 12px;
    border: 1px solid #ccc;
    border-top: none;
}

/* Style the close button */
.topright {
    float: right;
    cursor: pointer;
    font-size: 28px;
}

.topright:hover {color: red;}
<div class = "tab">
  <button class = "tablinks" onclick = "openCity(event, 'London')" id = "defaultOpen">London</button>
  <button class = "tablinks" onclick = "openCity(event, 'Paris')">Paris</button>
  <button class = "tablinks" onclick = "openCity(event, 'Tokyo')">Tokyo</button>
</div>

<div id = "London" class = "tabcontent">
  <span onclick = "this.parentElement.style.display='none'" class = "topright">&times</span>
  <h3>London</h3>
  <p>London is the capital city of England.</p>
</div>

<div id = "Paris" class = "tabcontent">
  <span onclick = "this.parentElement.style.display='none'" class = "topright">&times</span>
  <h3>Paris</h3>
  <p>Paris is the capital of France.</p> 
</div>

<div id = "Tokyo" class = "tabcontent">
  <span onclick = "this.parentElement.style.display='none'" class = "topright">&times</span>
  <h3>Tokyo</h3>
  <p>Tokyo is the capital of Japan.</p>
</div>

Теперь у меня есть две вещи,

  • во-первых, я хотел бы, чтобы вкладки закрывались при нажатии на заголовок (Лондон, Париж, Токио), а затем удалить активный класс из этого названия, когда это нажато.

  • Во-вторых, я бы хотел, чтобы этот отзывчивый был с двумя вкладками в ряд, третий идет во втором ряду, а затем щелчком мыши открывается право внизу, на которой щелкнули, и нажмите третью.

Любая подсказка поможет, заранее спасибо

не совсем понял твой второй вопрос, приятель

yqlim 07.04.2018 12:14

Я тоже не понимаю .. Вы не можете показать две вкладки подряд, потому что логика требует, чтобы вы показывали только одну active.

Yuri 07.04.2018 12:30

Извините, если я не понял. Мой план состоит в том, чтобы иметь шесть вкладок с шестью названиями (Лондон, Париж ..). В определенной точке останова (например, менее 1200 пикселей) шесть вкладок будут в двух строках (по 3 строки). Когда я нажимаю вкладку, теперь она открывается под второй строкой заголовков, и я хотел бы, чтобы ее открывали под первой строкой заголовков, а вторую строку нужно сдвинуть вниз.

Marko Petković 07.04.2018 14:09

Я не думаю, что это возможно, потому что вы не можете просто переставлять элементы в соответствии с шириной экрана только с помощью CSS. Вы рассматривали возможность уменьшения заголовков в раскрывающемся меню?

Yuri 07.04.2018 15:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
864
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для вас вопрос нет. 1, вы можете просто перейти с «openCity» на «toggleCity», проверив, отображается ли текущий город -> затем вы скроете, в противном случае вы его покажете.

function toggleCity(evt, cityName) {
    var i, tabcontent, tablinks;
    tabcontent = document.getElementsByClassName("tabcontent");
   
    tablinks = document.getElementsByClassName("tablinks");
    for (i = 0; i < tablinks.length; i++) {
        tablinks[i].className = tablinks[i].className.replace(" active", "");
    }
    var prev_state_display = document.getElementById(cityName).style.display;
    
    for (i = 0; i < tabcontent.length; i++) {
        tabcontent[i].style.display = "none";
    }
    
    if ( prev_state_display === "none"){
        document.getElementById(cityName).style.display = "block";
        evt.currentTarget.className += " active";
    } else {
        document.getElementById(cityName).style.display = "none";
        evt.currentTarget.className.replace(" active", "");
    }
}

// Get the element with id = "defaultOpen" and click on it
document.getElementById("defaultOpen").click();
/* Style the tab */
.tab {
    overflow: hidden;
    border: 1px solid #ccc;
    background-color: #f1f1f1;
}

/* Style the buttons inside the tab */
.tab button {
    background-color: inherit;
    float: left;
    border: none;
    outline: none;
    cursor: pointer;
    padding: 14px 16px;
    transition: 0.3s;
    font-size: 17px;
}

/* Change background color of buttons on hover */
.tab button:hover {
    background-color: #ddd;
}

/* Create an active/current tablink class */
.tab button.active {
    background-color: #ccc;
}

/* Style the tab content */
.tabcontent {
    display: none;
    padding: 6px 12px;
    border: 1px solid #ccc;
    border-top: none;
}

/* Style the close button */
.topright {
    float: right;
    cursor: pointer;
    font-size: 28px;
}

.topright:hover {color: red;}
<div class = "tab">
  <button class = "tablinks" onclick = "toggleCity(event, 'London')" id = "defaultOpen">London</button>
  <button class = "tablinks" onclick = "toggleCity(event, 'Paris')">Paris</button>
  <button class = "tablinks" onclick = "toggleCity(event, 'Tokyo')">Tokyo</button>
</div>

<div id = "London" class = "tabcontent">
  <span onclick = "toggleCity(event, 'London')" class = "topright">&times</span>
  <h3>London</h3>
  <p>London is the capital city of England.</p>
</div>

<div id = "Paris" class = "tabcontent">
  <span onclick = "toggleCity(event, 'Paris')" class = "topright">&times</span>
  <h3>Paris</h3>
  <p>Paris is the capital of France.</p> 
</div>

<div id = "Tokyo" class = "tabcontent">
  <span onclick = "toggleCity(event, 'Tokyo')" class = "topright">&times</span>
  <h3>Tokyo</h3>
  <p>Tokyo is the capital of Japan.</p>
</div>

Что касается вашего вопроса, то нет. 2, здесь вы можете увидеть образец, написанный «плохим кодом», чтобы направить вас на верный путь. Если вы измените размер контейнера iframe, он будет вести себя так, как вы просили.

Тем не менее, он нуждается в хорошем обзоре. ССЫЛКА НА САЙТ

Код разделен на две части, но показан как единое целое с помощью чисел с плавающей запятой. Отметьте @media внизу кода CSS.

PS Я использовал код jquery, так как я получал некоторую ошибку из-за того, что функция toggleCity не была определена ..

Способ jQuery

Вот как это можно сделать с помощью jQuery. Просто добавьте стиль CSS следующим образом

.tabcontent.active {display: block}

Также добавьте атрибут HTML5 data в .tablinks, и вот скрипт

$('.tablinks').on('click', function(){
  let target_id = $(this).data('target');
  $('.tablinks, .tabcontent').removeClass('active');
  $(this).addClass('active');
  $(target_id).addClass('active');
});
$('.close-tab').on('click', function(){
  $('.tablinks, .tabcontent').removeClass('active');
});

$("#defaultOpen").click();

-> Рабочая рабочий пример

Это здорово, спасибо. Не могли бы вы помочь мне еще с одним делом. Как я могу изменить этот активный класс после того, как я нажму на x для закрытия. Большое спасибо.

Marko Petković 07.04.2018 14:31

Это может быть один подход, не чистый, но он может быть хорошим. Единственное, что я не вижу, это как, когда я нажимаю на x, чтобы закрыть, чтобы удалить активный класс из заголовка вкладки. Не могли бы вы помочь мне с этим?

Marko Petković 07.04.2018 22:53

Проверить отредактированный пост. Вам следует заменить функцию onClick для диапазона X.

Yuri 08.04.2018 00:21

Если хотите, я также могу показать вам, как это сделать с помощью jQuery. Намного меньше строк кода.

Yuri 08.04.2018 00:21

Другие вопросы по теме