diff --git a/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx b/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx index ed5ec122ee73..32883e1b37e1 100644 --- a/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx @@ -5,35 +5,43 @@ * LICENSE file in the root directory of this source tree. */ -import React from 'react'; +import React, {useRef, useEffect} from 'react'; +import {useLocation} from '@docusaurus/router'; import styles from './styles.module.css'; +function programmaticFocus(el) { + el.setAttribute('tabindex', '-1'); + el.focus(); + setTimeout(() => el.removeAttribute('tabindex'), 1000); +} + function SkipToContent(): JSX.Element { - const handleSkip = (e: React.KeyboardEvent) => { - if (e.keyCode !== 13) { - return; - } + const containerRef = useRef(null); + const location = useLocation(); - (document.activeElement as HTMLElement).blur(); + const handleSkip = (e: React.MouseEvent) => { + e.preventDefault(); - const firstMainElement = document.querySelector('main:first-of-type'); + const targetElement = + document.querySelector('main:first-of-type') || + document.querySelector('.main-wrapper'); - if (firstMainElement) { - firstMainElement.scrollIntoView(); + if (targetElement) { + programmaticFocus(targetElement); } }; + useEffect(() => { + programmaticFocus(containerRef.current); + }, [location.pathname]); + return ( - + + ); }