javascript - 使用箭头键滚动在 Gatsby 中不起作用
问题描述
我目前正在使用 Gatsby 开发一个 React 项目,其中页面在页面的主要元素内滚动,并且主要元素包含在滚动时捕捉的部分(使用scroll-snap-type
/ scroll-snap-align
)。我的网站结构如下:
<body>
<div id="___gatsby">
<div tabindex:"-1" id="gatsby-focus-wrapper" style="outline: none;">
<main>
<section></section>
<section></section>
<section></section>
</main>
</div>
</div>
</body>
出于某种原因,在主元素内滚动页面会消除我使用箭头键滚动网站的能力,而问题似乎#gatsby-focus-wrapper
是@reach/router 出于可访问性原因添加的。
经过一些实验后,我发现我可以通过从主元素中删除 tab-index 属性#gatby-focus-wrapper
或tabIndex: {-1}
在主元素上设置来解决问题。这允许我在通过单击页面使主要元素处于活动状态后使用箭头键滚动,但这并不理想。
下面的代码片段演示了这种行为(如果不先单击页面,就无法使用箭头键滚动)但是如果您将此代码复制到新的 Gatsby 项目中(当然减去 gatsby 包装器元素),您将无法使用滚动完全没有使用我上面描述的方法之一的箭头键:
html {
height: calc(100vh - calc(100vh - 100%));
}
body {
margin: 0;
}
body, #___gatsby, #gatsby-focus-wrapper, main {
height: 100%;
}
main {
overflow: hidden scroll;
scroll-snap-type: y mandatory;
}
.blue, .green, .yellow {
height: 100%;
scroll-snap-align: start;
}
.blue {
background-color: blue;
}
.green {
background-color: green;
}
.yellow {
background-color: yellow;
}
<div id="___gatsby">
<div id="gatsby-focus-wrapper" tabindex:"-1">
<main>
<div class="blue"></div>
<div class="green"></div>
<div class="yellow"></div>
</main>
</div>
</div>
有没有办法让主要元素默认激活来解决这个问题?如果是这样,这会破坏我的屏幕阅读器网站吗?或者也许一些我没有利用的内置 Gatsby 功能?
解决方案
推荐阅读
- asp.net-mvc - 将 ToList 更改为 ToListAsync 是否确实解决了“在此上下文中启动的第二个操作”
- ubuntu - 未找到 Ubuntu 软件包“gcc”的别名,但找到了“gcc-4.8”
- powershell - powershell“Get-Volume”命令以错误完成
- javascript - 如何在javascript中双重滚动
- java - Java和PHP应用程序的GC和内存行为?
- php - 无法显示 DataTable 中的最后一列
- javascript - 如何在 JWK 响应 (PHP) 中获取密钥 ID 值
- c# - HttpClient:无法从 WCF 服务连接到服务。从控制台应用程序同样工作正常
- javascript - 如何将下拉选项添加到多行表单?
- php - 从 Codeigniter 中的两个大表中检索数据的最佳查询