仅在右键单击时触发 Chakra UI 菜单

发布于 2025-01-17 11:57:48 字数 526 浏览 0 评论 0原文

是否可以从文档中修改示例以在右键单击(上下文菜单)上而不是普通单击的菜单触发?

<Menu>
  <MenuButton as={Button} rightIcon={<ChevronDownIcon />}>
    Actions
  </MenuButton>
  <MenuList>
    <MenuItem>Download</MenuItem>
    <MenuItem>Create a Copy</MenuItem>
    <MenuItem>Mark as Draft</MenuItem>
    <MenuItem>Delete</MenuItem>
    <MenuItem>Attend a Workshop</MenuItem>
  </MenuList>
</Menu>

Is it possible to modify the example from the docs to make the menu trigger on right click (context menu) instead of a normal click ?

<Menu>
  <MenuButton as={Button} rightIcon={<ChevronDownIcon />}>
    Actions
  </MenuButton>
  <MenuList>
    <MenuItem>Download</MenuItem>
    <MenuItem>Create a Copy</MenuItem>
    <MenuItem>Mark as Draft</MenuItem>
    <MenuItem>Delete</MenuItem>
    <MenuItem>Attend a Workshop</MenuItem>
  </MenuList>
</Menu>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

久而酒知 2025-01-24 11:57:48

如果您正在寻找如何使菜单作为上下文菜单工作,请执行以下操作:

function ContextMenu() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <Menu
      isOpen={isOpen}
      onClose={() => {
        setIsOpen(false);
      }}
    >
      <Button
        onContextMenu={(e) => {
          e.preventDefault();
          setIsOpen(true);

          const menu = document.querySelector("[role=menu]");

          const popper = menu.parentElement;

          const x = e.clientX;
          const y = e.clientY;

          Object.assign(popper.style, {
            top: `${y}px`,
            left: `${x}px`
          });
        }}
      >
        Right click to open
      </Button>
      <MenuList
        onAnimationEnd={(e) => {
          const menu = document.querySelector("[role=menu]");
          menu.focus();
        }}
      >
        <MenuItem>Download</MenuItem>
        <MenuItem>Create a Copy</MenuItem>
        <MenuItem>Mark as Draft</MenuItem>
        <MenuItem>Delete</MenuItem>
        <MenuItem>Attend a Workshop</MenuItem>
      </MenuList>
    </Menu>
  );
}

本质上,您需要首先删除绑定到默认单击事件的 MenuButton,然后添加新按钮以触发上下文菜单。

If you're looking for how to make Menu work as a Context Menu, here's how to achieve that:

function ContextMenu() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <Menu
      isOpen={isOpen}
      onClose={() => {
        setIsOpen(false);
      }}
    >
      <Button
        onContextMenu={(e) => {
          e.preventDefault();
          setIsOpen(true);

          const menu = document.querySelector("[role=menu]");

          const popper = menu.parentElement;

          const x = e.clientX;
          const y = e.clientY;

          Object.assign(popper.style, {
            top: `${y}px`,
            left: `${x}px`
          });
        }}
      >
        Right click to open
      </Button>
      <MenuList
        onAnimationEnd={(e) => {
          const menu = document.querySelector("[role=menu]");
          menu.focus();
        }}
      >
        <MenuItem>Download</MenuItem>
        <MenuItem>Create a Copy</MenuItem>
        <MenuItem>Mark as Draft</MenuItem>
        <MenuItem>Delete</MenuItem>
        <MenuItem>Attend a Workshop</MenuItem>
      </MenuList>
    </Menu>
  );
}

Essentially, you need to first remove the MenuButton that binds to the default click event and then add in a new button to trigger the context menu.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文