Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

这是一个很小众的想法,但是 #1

Open
gooff327 opened this issue Jul 3, 2023 · 6 comments
Open

这是一个很小众的想法,但是 #1

gooff327 opened this issue Jul 3, 2023 · 6 comments

Comments

@gooff327
Copy link

gooff327 commented Jul 3, 2023

作者你好,我们目前在开发的所有产品都需要符合WCAG2.1 AAA 标准,目前我们使用aria-*, role, tabindex, focusLock, scrollLock来进行实现,想请问作者,这个lib在焦点管理上有什么突出的亮点吗

@wswmsword
Copy link
Owner

wswmsword commented Jul 3, 2023

谢谢关注。

focus-lock 我有关注,但还没来得及具体了解,类似还有 focus-trap、focus-rings。

focus-no-jutsu 主要关注焦点从开始到结束的完整流程,以这个流程为一个管理单位,这个流程有个模式,模式涉及到“入口”、“列表”和“出口”,在 focus-no-jutsu 里,焦点从“入口”到“列表”,到“出口”,最后回到“入口”。可能 focus-lock 等库都关注了“列表”这部分,所以”入口“和”出口“的部分 focus-no-jutsu 更灵活和集中,focus-no-jutsu 的入参选项也都以这三点分类。“列表”这部分可能还有些其它库不具备的特性:

  • 比如焦点矫正(记忆),选项卡会碰到这个问题,Tab 进选项卡的焦点应该落在上一次离开选项卡的地方;
  • 自定义列表内焦点导航的组合键,比如方向键;
  • 支持设置焦点的初始位置,比如选项卡里,被选中的选项卡不一定是第一个,就会用到这个特性。

上面提到选项卡在项目的在线范例里有体现。还有的比如设置 aria-*,focus-no-jutsu 提供了钩子可以辅助更新这些属性,比如按钮的 aria-expanded,就可以在我上面提到的“入口”阶段设置为 true,出口阶段设置为 false

@wswmsword
Copy link
Owner

感觉也不是很小众,如果考虑到键盘和鼠标一样都是输入设备,那所有桌面端应用都要适配键盘焦点了。。

@gooff327
Copy link
Author

gooff327 commented Jul 3, 2023

是的,你可以参考这个https://chakra-ui.com 组件,里面提到的一些不具备的特性都有实现,比如menu的navigation (除方向键外还支持首字母快速选择, 我觉得这很酷),另外我想问一下这个对Infinity Scroll List 的支持怎么样

@gooff327
Copy link
Author

gooff327 commented Jul 3, 2023

我觉得不算小众,至少国外的大多数website都有a11y方面的认证需求

@gooff327
Copy link
Author

gooff327 commented Jul 3, 2023

感觉也不是很小众,如果考虑到键盘和鼠标一样都是输入设备,那所有桌面端应用都要适配键盘焦点了。。

我说的小众只是焦点管理,而不是a11y

@wswmsword
Copy link
Owner

wswmsword commented Jul 3, 2023

是的,你可以参考这个https://chakra-ui.com 组件,里面提到的一些不具备的特性都有实现,比如menu的navigation (除方向键外还支持首字母快速选择, 我觉得这很酷),另外我想问一下这个对Infinity Scroll List 的支持怎么样

嗯,无限滚动有支持,类似下面这样,返回值有个 updateList API:

const focus = focusNoJutsu([#item1, #item6]);
window.scrollTo(0, document.body.scrollHeight); // scroll to bottom
setTimeout(() => {
  // fetched more items
  focus.updateList([#item1, #item12]);
}, 3000);

目前是这样,不过补一句,这种滚动一般有个“回到顶部”按钮要考虑,可以在列表里按 Esc 跳到按钮,或者把按钮作为最后一个 item,或者别的办法。

有些嵌套的情况现在还不支持,像树形结构这种。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants