#javascript #jquery #css
#javascript #jquery #css
Вопрос:
У меня есть разделы, которые все занимают одинаковое пространство, и я хочу настроить jQuery, в котором один раздел находится поверх другого при нажатии на разные вкладки. Я предполагаю, что это должно быть сделано путем изменения атрибута z-index с использованием атрибута data-*, который соединяет вкладку с div.
/*The tabs to be clicked*/
<ul class="tabs">
<li class="tab" data-tabcontainer-id="websites" style="background-color:#1aa3ff;">Websites</li>
<li class="tab" data-tabcontainer-id="sitemaps">Sitemaps</li>
<li class="tab" data-tabcontainer-id="pages">Pages</li>
</ul>
/*The divs that need to come on top of each other*/
<div id="websites" class="tabcontainer">Websites</div>
<div id="sitemaps" class="tabcontainer">Sitemaps</div>
<div id="pages" class="tabcontainer">Pages</div>
Комментарии:
1. нет, для изменения стиля z-index вы используете, в частности, атрибут style элементов
style.zIndex
2. или вы можете переключить класс с указанным индексом z
3. лучше переключить отображение: блокировать / нет
Ответ №1:
ДЕМОНСТРАЦИЯ
http://plnkr.co/edit/aNomjINfbYYrRUhMj63A?p=preview
Вот как вы можете изменить z-index
свойство, используя атрибут data.
JS:
jQuery(document).ready(function(){
$('.tab').click(function(){
var target = $(this).data('tabcontainer-id');
$('.tabcontainer').css('z-index', '0'); //resets z-index to 0 for all other
$('.tabcontainer#' target).css('z-index', '1'); //sets z-index for current target to 1
})
});
Я написал ответ только для того, чтобы удовлетворить то, что вы спрашивали. Но, читая ваш вопрос, я думаю, вам следует взглянуть на функцию вкладок в пользовательском интерфейсе jQuery. Может быть, это поможет.
Комментарии:
1. Спасибо, Марк. Я ценю помощь и рекомендации!
Ответ №2:
ответ мадалин иваску, по моему мнению, совершенно правильный.
Возможно, это немного не по теме, но вы можете использовать Jquery UI для вкладок. Легко внедряется и с ним работать. В этом случае вам не нужно беспокоиться об управлении z-индексом. Но это может не подходить для вашего случая.
<div id="tabs">
<ul >
<li><a href="#websites" style="background-color:#1aa3ff;">Websites</a></li>
<li><a href="#sitemaps">Sitemaps</a></li>
<li><a href="#pages">Pages</a></li>
</ul>
<div id="websites" class="tabcontainer">Websites</div>
<div id="sitemaps" class="tabcontainer">Sitemaps</div>
<div id="pages" class="tabcontainer">Pages</div>
</div>
Скрипка:https://jsfiddle.net/uxwyj4d4 /
Ответ №3:
лучше переключить отображение: блокировать / нет
$('.tabcontainer').not('.tabcontainer:first').hide();
$('.tab').click(function(){
//toggle active class on tabs
$('.tab').removeClass('active');
$(this).addClass('active');
//show corresponding tab container
var id = '#' $(this).attr('data-tabcontainer-id');
$('.tabcontainer').hide();//here you can go with another class like above that will toggle between block and none
$(id).show();
});
Ответ №4:
Пример для отображения вкладок с использованием ванильного js, jQuery не требуется. В этом примере вместо z-индекса используется только display.
// get tabs
var targets = {
websites: document.getElementById('websites'),
sitemaps: document.getElementById('sitemaps'),
pages: document.getElementById('pages')
},
show = function(target) {
hideAll();
targets[target.dataset.tabcontainerId].style.display = '';
},
hideAll = function() {
// hide all tabs
Object.keys(targets).forEach(function(key) {
targets[key].style.display = 'none';
});
};
// when click on link show tab
document.getElementById('w').addEventListener('click', function(event) {
show(event.target);
});
document.getElementById('s').addEventListener('click', function(event) {
show(event.target);
});
document.getElementById('p').addEventListener('click', function(event) {
show(event.target);
});
#websites,
#sitemaps,
#pages {
position: absolute;
top: 150px;
width: 100px;
height: 100px;
}
#websites {
background-color: red;
}
#sitemaps {
background-color: blue;
}
#pages {
background-color: green;
}
<ul class="tabs">
<li id="w" class="tab" data-tabcontainer-id="websites" style="background-color:#1aa3ff;">Websites</li>
<li id="s" class="tab" data-tabcontainer-id="sitemaps">Sitemaps</li>
<li id="p" class="tab" data-tabcontainer-id="pages">Pages</li>
</ul>
<div id="websites" class="tabcontainer">Websites</div>
<div id="sitemaps" class="tabcontainer">Sitemaps</div>
<div id="pages" class="tabcontainer">Pages</div>