Make home more responsive depending on screen width
This commit is contained in:
68
resources/js/responsive.js
Normal file
68
resources/js/responsive.js
Normal file
@@ -0,0 +1,68 @@
|
||||
function updateGrid(grid) {
|
||||
// Skip hidden grids
|
||||
if (grid.offsetParent === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const items = [...grid.querySelectorAll('.episode-item')];
|
||||
|
||||
if (!items.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reset visibility first
|
||||
items.forEach(item => {
|
||||
item.style.display = '';
|
||||
});
|
||||
|
||||
// Determine actual column count
|
||||
const firstTop = items[0].offsetTop;
|
||||
|
||||
let columns = 0;
|
||||
|
||||
for (const item of items) {
|
||||
if (item.offsetTop !== firstTop) {
|
||||
break;
|
||||
}
|
||||
|
||||
columns++;
|
||||
}
|
||||
|
||||
const rows = parseInt(grid.dataset.rows || '2', 10);
|
||||
|
||||
const visibleItems = columns * rows;
|
||||
|
||||
items.forEach((item, index) => {
|
||||
item.style.display = index < visibleItems
|
||||
? ''
|
||||
: 'none';
|
||||
});
|
||||
}
|
||||
|
||||
function updateAllEpisodeGrids() {
|
||||
document.querySelectorAll('.episode-grid').forEach(updateGrid);
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
updateGrid(entry.target);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll('.episode-grid').forEach(grid => {
|
||||
observer.observe(grid);
|
||||
});
|
||||
|
||||
let resizeTimeout;
|
||||
|
||||
window.addEventListener('resize', () => {
|
||||
clearTimeout(resizeTimeout);
|
||||
|
||||
resizeTimeout = setTimeout(() => {
|
||||
updateAllEpisodeGrids();
|
||||
}, 100);
|
||||
});
|
||||
|
||||
window.addEventListener('load', updateAllEpisodeGrids);
|
||||
Reference in New Issue
Block a user