Я пытаюсь создать функцию вкладок на своем веб-сайте, и я хотел бы, чтобы эти вкладки реагировали. Итак, я сделал такой код:
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">×</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">×</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">×</span>
<h3>Tokyo</h3>
<p>Tokyo is the capital of Japan.</p>
</div>Теперь у меня есть две вещи,
во-первых, я хотел бы, чтобы вкладки закрывались при нажатии на заголовок (Лондон, Париж, Токио), а затем удалить активный класс из этого названия, когда это нажато.
Во-вторых, я бы хотел, чтобы этот отзывчивый был с двумя вкладками в ряд, третий идет во втором ряду, а затем щелчком мыши открывается право внизу, на которой щелкнули, и нажмите третью.
Любая подсказка поможет, заранее спасибо
Я тоже не понимаю .. Вы не можете показать две вкладки подряд, потому что логика требует, чтобы вы показывали только одну active.
Извините, если я не понял. Мой план состоит в том, чтобы иметь шесть вкладок с шестью названиями (Лондон, Париж ..). В определенной точке останова (например, менее 1200 пикселей) шесть вкладок будут в двух строках (по 3 строки). Когда я нажимаю вкладку, теперь она открывается под второй строкой заголовков, и я хотел бы, чтобы ее открывали под первой строкой заголовков, а вторую строку нужно сдвинуть вниз.
Я не думаю, что это возможно, потому что вы не можете просто переставлять элементы в соответствии с шириной экрана только с помощью CSS. Вы рассматривали возможность уменьшения заголовков в раскрывающемся меню?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для вас вопрос нет. 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">×</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">×</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">×</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 для закрытия. Большое спасибо.
Это может быть один подход, не чистый, но он может быть хорошим. Единственное, что я не вижу, это как, когда я нажимаю на x, чтобы закрыть, чтобы удалить активный класс из заголовка вкладки. Не могли бы вы помочь мне с этим?
Проверить отредактированный пост. Вам следует заменить функцию onClick для диапазона X.
Если хотите, я также могу показать вам, как это сделать с помощью jQuery. Намного меньше строк кода.
не совсем понял твой второй вопрос, приятель