Created
March 13, 2018 15:09
-
-
Save anonymous/0de3873f9f3f59b3524dfca080da728d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.toggle-content { | |
display: none; | |
height: 0; | |
overflow: hidden; | |
transition: height 350ms ease-in-out; | |
} | |
.toggle-content.is-visible { | |
display: block; | |
height: auto; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<p> | |
<a class="toggle" href="#example">Toggle Div</a> | |
</p> | |
<div class="toggle-content" id="example"> | |
Here's some text we want to toggle visibility of. | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Show an element | |
var show = function (elem) { | |
// Get the natural height of the element | |
var getHeight = function () { | |
elem.style.display = 'block'; // Make it visible | |
var height = elem.scrollHeight + 'px'; // Get it's height | |
elem.style.display = ''; // Hide it again | |
return height; | |
}; | |
var height = getHeight(); // Get the natural height | |
elem.classList.add('is-visible'); // Make the element visible | |
elem.style.height = height; // Update the max-height | |
// Once the transition is complete, remove the inline max-height so the content can scale responsively | |
window.setTimeout(function () { | |
elem.style.height = ''; | |
}, 350); | |
}; | |
// Hide an element | |
var hide = function (elem) { | |
// Give the element a height to change from | |
elem.style.height = elem.scrollHeight + 'px'; | |
// Set the height back to 0 | |
window.setTimeout(function () { | |
elem.style.height = '0'; | |
}, 1); | |
// When the transition is complete, hide it | |
window.setTimeout(function () { | |
elem.classList.remove('is-visible'); | |
}, 350); | |
}; | |
// Toggle element visibility | |
var toggle = function (elem, timing) { | |
// If the element is visible, hide it | |
if (elem.classList.contains('is-visible')) { | |
hide(elem); | |
return; | |
} | |
// Otherwise, show it | |
show(elem); | |
}; | |
// Listen for click events | |
document.addEventListener('click', function (event) { | |
// Make sure clicked element is our toggle | |
if (!event.target.classList.contains('toggle')) return; | |
// Prevent default link behavior | |
event.preventDefault(); | |
// Get the content | |
var content = document.querySelector(event.target.hash); | |
if (!content) return; | |
// Toggle the content | |
toggle(content); | |
}, false); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment