亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 React.js 上使用鍵盤導航時,屏幕閱讀器無法讀取頁面

在 React.js 上使用鍵盤導航時,屏幕閱讀器無法讀取頁面

桃花長相依 2023-07-06 18:17:20
當用戶通過單擊鏈接組件導航到新頁面時,屏幕閱讀器會以正確的順序完美地讀取新頁面。如果用戶通過按 Enter 或空格鍵選擇新頁面,瀏覽器仍會導航到正確的頁面,但屏幕閱讀器不會讀取頁面內容。新頁面導航的代碼如下所示:  <Card className={classes.root}>     <Link to={`/event/${eventId}`} component={CardActionArea}>        <CardMedia          className={classes.media}        />        <CardContent className={classes.cardContent}>              ...some info..        </CardContent>     </Link>  </Card>我嘗試通過創建 keyDownEvent 來解決此問題,如下所示,但沒有用: const elementRef = React.createRef<HTMLAnchorElement>();  const handleKeyDown = (e) => {    if (e.keyCode === 13 || e.keyCode === 32) {      e.preventDefault();      elementRef.current.click();    }  }并在鏈接中調用它  <Link to={`/event/${eventId}`} component={CardActionArea} onKeyDown={(e) => handleKeyDown(e)}>有人知道我哪里出錯了或者我應該嘗試什么嗎?
查看完整描述

1 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

無法告訴您如何在 React 中執行此操作,但這是一個簡單的過程,因此我相信您不會遇到困難。解決問題的關鍵部分是“導航后”標題,但是如果可以的話請嘗試實現所有內容,因為它將極大地改善屏幕閱讀器的用戶體驗。

SPA 模式導航最佳實踐

在 SPA 中處理導航的推薦方法實際上非常簡單,只需兩個步驟。

  1. 告訴用戶導航即將發生(在導航之前)

  2. 讓用戶知道加載已完成(導航后)。

導航之前(點擊鏈接)

如果您使用 SPA 模式(因此會中斷正常導航),您需要向用戶發出信號,表明頁面正在加載。例如,我單擊您的鏈接,您需要讓我知道當您使用或等效方式攔截正常瀏覽器行為時正在執行某個操作(正在加載......)e.preventDefault()

aria-live=assertive最簡單的方法是在解釋頁面正在加載的區域上使用。您可以谷歌如何正確實現這一點,但本質上您會在<div aria-live="assertive" class="visually-hidden">loading</div>單擊鏈接時使用一些加載消息更新隱藏 div ( ) 的內容。

這應該在進行任何 AJAX 調用之前完成。

導航后(加載新內容)

當新頁面加載時,您需要管理焦點。

做到這一點的最佳方法是<h1>為每個包含tabindex="-1".?使用tabindex="-1"它意味著標題不會被 JavaScript 以外的任何東西聚焦,因此不會干擾正常的文檔流。

頁面加載并且內容已完全填充后,您在 JavaScript 導航功能中執行的最后一個操作是將焦點置于此標題上。

這樣做有兩個好處:

  1. 它讓用戶知道他們現在在哪里

  2. 它還讓他們知道頁面加載何時完成(因為 AJAX 導航不會在大多數屏幕閱讀器中宣布頁面加載時間)。

此時,您可能還想清除<div aria-live="assertive">內容,以便為進一步導航做好準備。


查看完整回答
反對 回復 2023-07-06
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號