57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
![]() |
/**
|
|||
|
* This script will handle the layout changes
|
|||
|
* when you go from chad computer screen
|
|||
|
* to shitty mobile screen.
|
|||
|
*
|
|||
|
* Author: Atomos821
|
|||
|
*/
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const defaultFontSize = 16; // unit: px.
|
|||
|
const matchValue = 48; // unit: em.
|
|||
|
|
|||
|
function sideMenu(bool) {
|
|||
|
const nav = document.querySelector('header nav');
|
|||
|
const overlay = document.querySelector('div[overlay-menu-content]');
|
|||
|
|
|||
|
if (!bool) {
|
|||
|
// Restore nav to initial state.
|
|||
|
nav.removeAttribute('style');
|
|||
|
nav.querySelectorAll('a').forEach(link => link.removeAttribute('style'));
|
|||
|
nav.querySelector('button[aki-menu]').removeAttribute('style');
|
|||
|
|
|||
|
if (overlay.hasAttribute('opened')) {
|
|||
|
overlay.removeAttribute('opened');
|
|||
|
overlay.setAttribute('closed', null);
|
|||
|
}
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
nav.style.justifyContent = 'flex-start';
|
|||
|
nav.querySelector('button[aki-menu]').style.display = 'block';
|
|||
|
nav.querySelectorAll('a').forEach(link => link.style.display = 'none');
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Toggles the side menu, either displaying or hiding it,
|
|||
|
* depending on the attributes of the overlay menu.
|
|||
|
*/
|
|||
|
function toggleMenu() {
|
|||
|
const overlay = document.querySelector('div[overlay-menu-content]');
|
|||
|
|
|||
|
if (overlay.hasAttribute('opened')) {
|
|||
|
overlay.removeAttribute('opened');
|
|||
|
overlay.setAttribute('closed', null);
|
|||
|
} else {
|
|||
|
overlay.removeAttribute('closed');
|
|||
|
overlay.setAttribute('opened', null);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// "Plz don't look sempai~ !!!" o(≧▼≦○〃
|
|||
|
let widthMatch = window.matchMedia(`(max-width: ${matchValue}em)`);
|
|||
|
widthMatch.addEventListener('change', matchedMedia => (matchedMedia.matches || window.innerWidth <= (matchValue * defaultFontSize)) ? sideMenu(true) : sideMenu(false));
|
|||
|
widthMatch.dispatchEvent(new Event("change")); // Force event on page load.
|
|||
|
document.querySelector('header nav button[aki-menu]').addEventListener('click', () => toggleMenu());
|