Repository navigation
输入框内按 Home/End 滚动的是对话流而不是光标(composer 位于 data-conversation-scroll 内) #12963
taogezhizun
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
摘要
输入框(composer)聚焦时按 Home / End,对话流会滚到顶部或底部,输入框里的光标不动。焦点确实在输入框内(
document.activeElement是[data-composer-seat]里的 contenteditable)。从发布包里能看到宿主把 composer seat 作为对话滚动体[data-conversation-scroll]的直接子节点渲染,而编辑器没有消费这两个键,浏览器就把它们交给了最近的滚动祖先。复现
证据
宿主
ConversationRoot的结构(发布包中的 JSX):宿主把 Home/End 列为滚动意图键,但对 composer seat 内的事件只是提前 return,并未阻止原生滚动:
运行时检查(在输入框聚焦时于 Console 执行):
也就是说:布局把输入框放进了滚动体,编辑器没有对 Home/End 调用
preventDefault,浏览器按原生规则滚动最近的滚动容器。建议
二选一(或两者都做):
preventDefault();data-conversation-scroll:改为滚动体之外的 sticky 区域,从结构上消除“键盘滚动对话而不是光标”的可能。环境
All reactions