Add keyboard navigation for service cards
This commit is contained in:
39
index.html
39
index.html
@@ -162,6 +162,45 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Keyboard navigation for service cards
|
||||||
|
let selectedIndex = -1;
|
||||||
|
const selectCard = (index) => {
|
||||||
|
const visibleCards = allServices.filter(card => card.style.display !== 'none');
|
||||||
|
if(visibleCards.length === 0) return;
|
||||||
|
|
||||||
|
// Remove previous selection
|
||||||
|
visibleCards.forEach(card => card.classList.remove('selected'));
|
||||||
|
|
||||||
|
// Update index
|
||||||
|
if(index < 0) index = visibleCards.length - 1;
|
||||||
|
if(index >= visibleCards.length) index = 0;
|
||||||
|
selectedIndex = index;
|
||||||
|
|
||||||
|
// Add selection
|
||||||
|
visibleCards[selectedIndex].classList.add('selected');
|
||||||
|
visibleCards[selectedIndex].scrollIntoView({behavior: 'smooth', block: 'nearest'});
|
||||||
|
};
|
||||||
|
|
||||||
|
document.addEventListener('keydown', (e) => {
|
||||||
|
if(document.activeElement === searchInput) return;
|
||||||
|
|
||||||
|
const visibleCards = allServices.filter(card => card.style.display !== 'none');
|
||||||
|
|
||||||
|
if(e.key === 'ArrowRight' || e.key === 'ArrowDown'){
|
||||||
|
e.preventDefault();
|
||||||
|
selectCard(selectedIndex + 1);
|
||||||
|
} else if(e.key === 'ArrowLeft' || e.key === 'ArrowUp'){
|
||||||
|
e.preventDefault();
|
||||||
|
selectCard(selectedIndex - 1);
|
||||||
|
} else if(e.key === 'Enter' && selectedIndex >= 0){
|
||||||
|
e.preventDefault();
|
||||||
|
visibleCards[selectedIndex].click();
|
||||||
|
} else if(e.key === 'Escape'){
|
||||||
|
visibleCards.forEach(card => card.classList.remove('selected'));
|
||||||
|
selectedIndex = -1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}catch(err){
|
}catch(err){
|
||||||
console.error(err);
|
console.error(err);
|
||||||
grid.innerHTML = '<p class="notes">Error loading services.xml — see console for details.</p>';
|
grid.innerHTML = '<p class="notes">Error loading services.xml — see console for details.</p>';
|
||||||
|
|||||||
Reference in New Issue
Block a user