mirror of
https://github.com/Coldsmiles/infstarweb.git
synced 2026-04-23 02:30:41 +08:00
feat: Refactor mobile menu and modal logic into setupUI function for improved organization
This commit is contained in:
70
sponsor.html
70
sponsor.html
@@ -640,75 +640,5 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="sponsor_script.js"></script>
|
<script src="sponsor_script.js"></script>
|
||||||
|
|
||||||
<script>
|
|
||||||
// Inline script for mobile menu toggling (copied from script.js)
|
|
||||||
// Since we are not using the full script.js which might have index-specific logic
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const toggle = document.getElementById('mobile-toggle');
|
|
||||||
const menu = document.getElementById('mobile-menu');
|
|
||||||
|
|
||||||
if (toggle && menu) {
|
|
||||||
const icon = toggle.querySelector('i');
|
|
||||||
toggle.addEventListener('click', () => {
|
|
||||||
menu.classList.toggle('active');
|
|
||||||
document.body.classList.toggle('menu-open');
|
|
||||||
|
|
||||||
if (menu.classList.contains('active')) {
|
|
||||||
if(icon) {
|
|
||||||
icon.classList.remove('fa-bars');
|
|
||||||
icon.classList.add('fa-times');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(icon) {
|
|
||||||
icon.classList.remove('fa-times');
|
|
||||||
icon.classList.add('fa-bars');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modal Logic
|
|
||||||
const modal = document.getElementById('sponsor-modal');
|
|
||||||
const btn = document.getElementById('open-sponsor-modal');
|
|
||||||
const span = document.getElementsByClassName('close-modal')[0];
|
|
||||||
const desktopView = document.getElementById('desktop-qr-view');
|
|
||||||
const mobileView = document.getElementById('mobile-btn-view');
|
|
||||||
|
|
||||||
// Detect Mobile
|
|
||||||
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.innerWidth < 768;
|
|
||||||
|
|
||||||
if (isMobile) {
|
|
||||||
if(desktopView) desktopView.style.display = 'none';
|
|
||||||
if(mobileView) mobileView.style.display = 'block';
|
|
||||||
} else {
|
|
||||||
if(desktopView) desktopView.style.display = 'block';
|
|
||||||
if(mobileView) mobileView.style.display = 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
btn.onclick = function() {
|
|
||||||
modal.style.display = "flex";
|
|
||||||
// Trigger reflow
|
|
||||||
void modal.offsetWidth;
|
|
||||||
modal.classList.add('show');
|
|
||||||
}
|
|
||||||
|
|
||||||
span.onclick = function() {
|
|
||||||
modal.classList.remove('show');
|
|
||||||
setTimeout(() => {
|
|
||||||
modal.style.display = "none";
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onclick = function(event) {
|
|
||||||
if (event.target == modal) {
|
|
||||||
modal.classList.remove('show');
|
|
||||||
setTimeout(() => {
|
|
||||||
modal.style.display = "none";
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -5,8 +5,82 @@ let filterState = { search: '', project: 'all' };
|
|||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
fetchSponsorsData();
|
fetchSponsorsData();
|
||||||
setupListeners();
|
setupListeners();
|
||||||
|
setupUI();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function setupUI() {
|
||||||
|
// Mobile menu toggle
|
||||||
|
const toggle = document.getElementById('mobile-toggle');
|
||||||
|
const menu = document.getElementById('mobile-menu');
|
||||||
|
|
||||||
|
if (toggle && menu) {
|
||||||
|
const icon = toggle.querySelector('i');
|
||||||
|
toggle.addEventListener('click', () => {
|
||||||
|
menu.classList.toggle('active');
|
||||||
|
document.body.classList.toggle('menu-open');
|
||||||
|
|
||||||
|
if (menu.classList.contains('active')) {
|
||||||
|
if(icon) {
|
||||||
|
icon.classList.remove('fa-bars');
|
||||||
|
icon.classList.add('fa-times');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(icon) {
|
||||||
|
icon.classList.remove('fa-times');
|
||||||
|
icon.classList.add('fa-bars');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modal Logic
|
||||||
|
const modal = document.getElementById('sponsor-modal');
|
||||||
|
const btn = document.getElementById('open-sponsor-modal');
|
||||||
|
const span = document.querySelector('.close-modal');
|
||||||
|
const desktopView = document.getElementById('desktop-qr-view');
|
||||||
|
const mobileView = document.getElementById('mobile-btn-view');
|
||||||
|
|
||||||
|
// Detect Mobile
|
||||||
|
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.innerWidth < 768;
|
||||||
|
|
||||||
|
if (isMobile) {
|
||||||
|
if(desktopView) desktopView.style.display = 'none';
|
||||||
|
if(mobileView) mobileView.style.display = 'block';
|
||||||
|
} else {
|
||||||
|
if(desktopView) desktopView.style.display = 'block';
|
||||||
|
if(mobileView) mobileView.style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modal && btn) {
|
||||||
|
btn.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault(); // Prevent accidental form submission
|
||||||
|
modal.style.display = "flex";
|
||||||
|
// Trigger reflow
|
||||||
|
void modal.offsetWidth;
|
||||||
|
modal.classList.add('show');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (span && modal) {
|
||||||
|
span.addEventListener('click', () => {
|
||||||
|
modal.classList.remove('show');
|
||||||
|
setTimeout(() => {
|
||||||
|
modal.style.display = "none";
|
||||||
|
}, 300);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('click', (event) => {
|
||||||
|
if (modal && event.target == modal) {
|
||||||
|
modal.classList.remove('show');
|
||||||
|
setTimeout(() => {
|
||||||
|
modal.style.display = "none";
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function setupListeners() {
|
function setupListeners() {
|
||||||
const searchInput = document.getElementById('sponsor-search');
|
const searchInput = document.getElementById('sponsor-search');
|
||||||
const filterContainer = document.getElementById('project-filters');
|
const filterContainer = document.getElementById('project-filters');
|
||||||
|
|||||||
Reference in New Issue
Block a user