当前位置: 首页 > 知识库问答 >
问题:

防止焦点div使用箭头键滚动

屈健柏
2023-03-14

我有一个内部滚动条的div组件,我想防止向上/向下箭头键在元素聚焦时滚动(鼠标单击元素),因为它们用于其他事件(例如缩放)。

我找到的唯一解决方案是将事件侦听器附加到文档,但是,它禁用所有默认的箭头键事件,例如在输入字段中移动光标。

以下是一个示例(在React中):https://codesandbox.io/s/rsc-live-example-fze6z

如何复制:

  • 用鼠标点击内部div(有文字)
  • 单击向下箭头键-

有没有一种方法可以在不禁用文档级滚动的情况下防止滚动?

谢谢!

更新:

这个缺失的部分正在向组件添加tab index=“0”(我更新了上面的代码)。谢谢@Jarvan

共有1个答案

许沛
2023-03-14

您可以筛选不希望阻止的事件,例如输入中的箭头事件。

if (e.target.tagName.toLowerCase()!=="input" &&(e.key === "ArrowUp" || e.key === "ArrowDown")) {
          e.preventDefault();
}

然后在输入中,将不会阻止光标移动。

但是,如果您想要保留的事件是同一元素中的某些行为,则不会起作用。

例如,如果在“防止箭头向上/向下滚动”div中有一些子项可以成为焦点,则希望通过使用箭头向上/向下在子项之间移动焦点。在这种情况下,我想你必须实现自定义滚动条,然后你就拥有了完全的控制权,因为在浏览器行为中,我看不到分离单个“滚动”动作的方法。

更新:

如果你知道你想要效果的组件或区域,只需添加到该区域。就像你的演示代码:

<div tabindex="0"
      onKeyDown={e => {
        console.log(e);
        if (e.key === "ArrowUp" || e.key === "ArrowDown") {
          e.stopPropagation();
          e.preventDefault();
          console.log(e.key);
          return false;
        }
        e.stopPropagation();
      }}
    >
      {result}
    </div>
 类似资料:
  • 问题内容: 我在JScrollPane中有一个JTextArea组件,并且文本区域不可编辑。我想使用向上和向下箭头键滚动文本区域(即,按箭头键将文本区域滚动一行)。任何想法如何实现这一目标? 问题答案: 是的,键绑定是必经之路,但是您不一定总是需要创建自己的动作。Swing组件带有您经常可以重用的默认操作。 有关这些操作的完整列表,请参见键绑定。 现在您知道了动作名称,您可以将其绑定到keyStr

  • 我发现了很多相关的问题(这里和其他地方),但没有具体找到这个问题。 我正在尝试侦听箭头键(37-40)的键关闭事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“keydown”事件。 示例:http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html 在该页面上,单击“在此处键入 - 但是,如果我做同样的事情,但

  • 我在我的页面上有一组选项卡,当点击时,将活动选项卡切换到点击选项卡的值。这工作得很顺利,但是当我看到新的活动标签周围有一个蓝色的大焦点框时,我嘴里留下了一股酸味。有没有一种React-y方法来防止这种情况? 带有preventDefault()的onMouseDown={this.someMethod}是否可以工作?

  • 我现在正在实验JavaFX,教自己如何使用箭头键移动文本和项。我做了一个程序,如果按下箭头键,就可以简单地在舞台上移动文本。 我想使一个圆圈移动我的窗格,而不是文本。要使用箭头键移动我的圆圈,我必须做哪些更改?

  • 问题内容: 我有以下要求: 我需要一个可滚动的JTextPane。用户可以在此文本窗格中键入,也可以将用户未键入的文本插入其中。想像即时消息窗口。尽管窗口必须是可滚动的,以允许用户查看以前键入的文本,但插入符号绝不能从其在文本末尾的位置移开。用户输入的任何文本将始终显示在末尾。 在JTextPane中,当用户使用滚动条滚动时,插入标记不会移动。视口已调整。但是,当用户按下向上和向下箭头键时,JTe

  • 问题内容: 如前所述,我想更改内的默认TAB行为(以使其充当类似或类似的组件) 这是事件动作 这是听众 我也尝试过evt.KEY_TYPED,没有任何喜悦。 有任何想法吗? 快速编辑:我也尝试代替 问题答案: 根据此类: 请注意,可以更短,根据[约书亚·戈德堡的意见,因为我们的目标是获得通过重写回默认行为: 这用于问题“ 我如何修改标签中的Tab键的行为JTextArea? ” 在以前的实现确实是