(function(tabthing, undefined) {
var tabthings = {
tabClassName: "tab-link",
tablockClassName: "tab-lock",
tabcontentClassName: "tab-content",
activeClassList: "active-show",
inactiveClassList: "inactive-hide",
tabLinks: {},
tabLocks: {},
tabContents: {},
linksParent: {},
locksParent: {},
contentParent: {}
};
function toggleclass(thisnode, isTrue = true) {
thisnode.classList.toggle(tabthings.activeClassList, isTrue);
thisnode.classList.toggle(tabthings.inactiveClassList, !isTrue);
}
function toggleActive(thisnode) {
toggleclass(thisnode, true);
}
function toggleInActive(thisnode) {
toggleclass(thisnode, false)
}
function toggleRelated(thisnode) {
let meIndex = [].indexOf.call(tabthings.linksParent.children, thisnode);
thisnode.classList.toggle("active", true);
if (thisnode.classList.contains("active")) {
toggleActive(tabthings.tabContents[meIndex]);
toggleInActive(tabthings.tabLocks[meIndex]);
} else {
inActivateAll(tabthings.tabLocks);
}
}
function inActivateAll(things) {
var i = things.length;
while (i--) {
toggleInActive(things[i]);
}
}
function activateAll(things) {
for (let i = 0; i < things.length; i++) {
toggleActive(things[i]);
}
}
function tabClickHandler(event) {
let meTab = this; //event.target;//same as this
// already active, do nothing
if (this.classList.contains('active')) {
inActivateAll(tabthings.tabContents);
toggleActive(tabthings.tabContents[0]);
meTab.classList.toggle("active", false);
return;
}
activateAll(tabthings.tabLocks);
inActivateAll(tabthings.tabContents);
for (let i = 0; i < tabthings.tabLinks.length; i++) {
tabthings.tabLinks[i].classList.toggle("active", false);
}
toggleRelated(meTab);
}
tabthing.setup = function() {
tabthings.linksParent = document.getElementById("tab-link-container");
tabthings.locksParent = document.getElementById("tab-lock-container");
tabthings.contentParent = document.getElementById("tab-content-container");
tabthings.tabLinks = document.getElementsByClassName(tabthings.tabClassName);
tabthings.tabLocks = document.getElementsByClassName(tabthings.tablockClassName);
tabthings.tabContents = document.getElementsByClassName(tabthings.tabcontentClassName);
// add event handlers
for (let i = 0; i < tabthings.tabLinks.length; i++) {
tabthings.tabLinks[i].addEventListener("click", tabClickHandler);
}
// trigger first tab click event
const clickevent = new Event('click');
tabthings.tabLinks[0].dispatchEvent(clickevent);
};
}(window.tabthing = window.tabthing || {}));
// call the setup function
tabthing.setup();
.mass-container {
border: 1px solid lime;
display: flex;
}
#tab-link-container,
#tab-lock-container {
grid-column: 1;
grid-row: 1;
}
#tab-link-container {
width: 100%;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 1rem;
border: 1px solid red;
top: 1px;
grid-row-start: 1;
grid-row-end: 12;
}
#tab-lock-container {
width: 100%;
margin-left: -100%;
display: grid;
border: 1px solid blue;
top: 1px;
grid-row-start: 1;
grid-row-end: 1;
grid-column-start: 1;
grid-column-end: 12;
pointer-events: none;
}
#tab-content-container {
border: solid cyan 1px;
display: grid;
}
.tab-content {
grid-row-start: 1;
grid-row-end: 1;
grid-column-start: 1;
grid-column-end: 12;
}
.tab-link,
.tab-lock {
margin-left: 1rem;
margin-right: 1rem;
margin-top: 1rem;
margin-bottom: 1rem;
}
.tab-lock {
display: flex;
justify-content: flex-end;
}
.tab-lock-1 {
grid-column-start: 1;
grid-column-end: 4;
}
.tab-lock-2 {
grid-column-start: 5;
grid-column-end: 8;
}
.tab-lock-3 {
grid-column-start: 9;
grid-column-end: 12;
}
.active-show {
visibility: visible;
}
.inactive-hide {
visibility: hidden;
}
.active {
background-color: #dddddd;
}
<div class="mass-container">
<div id="tab-link-container">
<span class="tab-link tab-link-1"><img src="Assets/Button_Tabs_Center.png" alt="first-img" /></span>
<span class="tab-link tab-link-2"><img src="Assets/Button_Tabs_Center.png" alt="second-img" /></span>
<span class="tab-link tab-link-3"><img src="Assets/Button_Tabs_Center.png" alt="third-img" /></span>
</div>
<div id="tab-lock-container">
<span class="tab-lock tab-lock-1 "><img src="Assets/lock.png" alt="1lck" /></span>
<span class="tab-lock tab-lock-2"><img src="Assets/lock.png" alt="2lck" /></span>
<span class="tab-lock tab-lock-3"><img src="Assets/lock.png" alt="3lck" /></span>
</div>
</div>
<div id="tab-content-container">
<div class="tab-content"><h2>h2 is good</h2>First off this is content</div>
<div class="tab-content"><h2>tab2 cool</h2>Second we have more content</div>
<div class="tab-content"><h2>tab3 Yay</h2>Now, this is still content</div>
</div>