ag-Grid - 在行悬停时显示按钮,就像 Gmail 中一样

2023-11-29

在 ag-Grid 中,我想在悬停一行时显示操作按钮,就像在 Gmail 中一样。无论滚动位置如何,操作按钮都必须出现在网格的右端。

有提到一种方法https://blog.ag-grid.com/build-email-client-with-ag-grid-like-gmail/。他们在最后一列上使用了 cellRenderer,并在发生“onCellMouseOver”时在其中显示按钮。仅当最后一列(使用 cellRenderer)始终处于视图中时,此方法才有效。如果该列消失,操作按钮也将消失。

我无法使用这种方法,因为就我而言,有很多列,并且网格中的所有列不能同时显示在屏幕上。因此,根据滚动位置,右端可能有任何列,因此我们不知道要在哪一列上添加 cellRenderer。

enter image description here

我们将如何实现这一目标?


这是一个演示我的解决方案的 plunk:https://plnkr.co/edit/X4hCimLy6aL3j4eh

事实证明,仅使用 CSS 就可以实现这一点。我是这样做的:

  1. 添加用于显示操作按钮的列。使用 cellRenderer 渲染其中的按钮。将其固定在右侧。
  2. Using CSS,
    • 将 ag-pinned-right-cols-container 绝对位置向右
    • 通过将宽度设置为 0 来隐藏右标题和间隔符
    • 对于未悬停的行,通过设置其填充和宽度 0 来隐藏其中的操作按钮单元格

这是完整的 CSS 和解释:

/* Hide right header and spacer */
.ag-pinned-right-header,
.ag-horizontal-right-spacer {
  width: 0 !important;
  min-width: 0 !important;
}

/* Add absolute position so that action buttons column will appear on top of other columns. 
   pointer-events: none to pass on mouse events to behind columns */
.ag-pinned-right-cols-container {
  position: absolute !important;
  right: 0;
  pointer-events: none;
}
/* Reset pointer-events so that click can happen on action buttons */
.ag-pinned-right-cols-container * {
  pointer-events: initial;
}

/* Hide border of right-cols-container */
.ag-pinned-right-cols-container .ag-cell {
  border: none !important;
}

/* Show action buttons only for the row that is being hovered. 
   For rows which are not being hovered, hide them by setting their width and padding to 0. */
.ag-pinned-right-cols-container .ag-row:not(.ag-row-hover),
.ag-pinned-right-cols-container .ag-row:not(.ag-row-hover) .ag-cell {
  width: 0 !important;
  padding: 0 !important;
}

Ag-grid 的默认行悬停和行选定颜色具有一定的透明度。由于我们的操作按钮列绝对放置在其他列之上,因此由于这些透明颜色的混合方式,其背景看起来更暗。

enter image description here

因此,最好在此方法中使用不透明的背景颜色,如下所示:

.ag-theme-alpine {
  --ag-row-hover-color: hsl(207, 90%, 94%);
  --ag-selected-row-background-color: hsl(207, 87%, 86%);
}

Overall,

Pros:-

  1. 这是一个即插即用的解决方案。您只需将 CSS 放在代码中即可,您将获得悬停功能按钮。
  2. 这种方法与框架无关。我已经在 React 和 Angular 上测试过它。 (对于 Angular,您必须使用 ng-deep 来解决样式封装问题)

Cons:-

  1. 如果您已经将一列或多列固定在右侧,则此操作将不起作用
  2. ag-grid 的未来版本可能会使用不同的类名。因此,在升级 ag-grid 时可能需要更新此 CSS
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ag-Grid - 在行悬停时显示按钮,就像 Gmail 中一样 的相关文章

随机推荐

  • 在程序运行时更改程序

    不确定这是 emacs SLIME 问题还是 CL 问题或 SBCL 问题 我听说 Lisp 的交互特性允许在程序运行时更改程序 不知道这意味着什么 我尝试了以下操作 将其放在一个单独的文件中 defparameter repl test
  • rdr 是一个“变量”,但像“方法”一样使用

    我正在尝试将此 VB NET 代码转换为 C Protected Sub BT KEM CARIAN Click ByVal sender As Object ByVal e As System EventArgs Handles BT K
  • 使用 ng-repeat 创建 AngularJS 表

    我从数据库得到以下响应 关于类数组 其中类嵌套在组中 最后嵌套在学生中 Response Id 1 Name Class 1 Location Building 1 Groups Id 1 Name GB1 Students Id 1 Na
  • 如何在 vagrant guest 中连接到基于名称的虚拟主机?

    在盒子里 我有两个虚拟主机
  • json 文件的 $http.get 总是返回 404

    我想向我的应用程序添加一个配置 JSON 文件 我已将其添加到我的项目中并尝试使用 http get 获取它 http get http localhost myProject content json success function d
  • 低音音频库开/关按钮

    在此示例中如何创建开 关音乐按钮 在 Inno Setup 安装期间播放声音 我想使用 image png 以下脚本创建一个按钮 您可以通过该按钮根据流的当前状态播放或暂停流 Setup AppName Bass Audio Project
  • 子状态机

    我有一个有 5 个州的 FSM 其中3个是通过子FSM UML模式 设计的 对于 VHDL 中的实现 恕我直言 有两种方法可以做到这一点 将它们总结为一个 这样我就有了一份包含子 FSM 的文档和一个包含一个大 FSM 的产品 与所有州建立
  • 确定 SPA 和 .NET Core 3 的角色

    我有一个使用 NET Core 3 1 的应用程序 还有一个使用由此生成的默认 React 应用程序的前端link 在 NET Core 应用程序中 我使用用户和角色设置了 Identity Server 当我使用 React 应用程序时
  • 如何迭代字典?

    我见过几种在 C 中迭代 字典的不同方法 有标准的方法吗 foreach KeyValuePair
  • 当我使用会话将值从一个页面发送到另一个页面时,出现以下错误[重复]

    这个问题在这里已经有答案了 警告 session start 打开 var cpanel php sessions ea php56 sess c84fdb91458e26c7325faf74a529a3 O RDWR 失败 没有这样的文件
  • 获取perl字符串计算结果

    如果一个字符串如下所示 str 5 2 1 我想从该字符串中获取计算结果 如何转换为标量来计算它 谢谢 最简单的方法是 print eval 5 2 1 但这并不安全 print eval print You are hacked 您需要先
  • Laravel - 使用 whereHas 获取最后一行

    我正在尝试获取上次用户活动的时间 created at 我有模型User and UserActivity 我想获取最后一个用户活动并检查该用户的最后一个活动是否是 3 天发送通知 User php
  • 忍者。对内部设置属性的奇怪拦截

    域对象 目标对象 cs public class TargetObject public virtual ChildTargetObject ChildTargetObject get return ChildTargetObjectInn
  • python: 为什么使用子进程调用 echo 会返回 WindowsError 2?

    在我的程序中 我有一个函数 runScript def runScript subprocess call echo hello 我在 Python 文档中看到过很多类似的例子 所以我认为这可行 但是 当我在程序中调用此函数时 它返回 Wi
  • 如何用C++实现“虚拟模板功能”

    首先 我已经阅读过并且现在知道虚拟模板成员函数在 C 中 还 不可能 解决方法是使类成为模板 然后在成员函数中也使用模板参数 但在 OOP 的背景下 我发现如果该类实际上是一个模板 下面的示例就不会很 自然 请注意 该代码实际上不起作用 但
  • 网页抓取 Pokemon 数据

    我试图找出每个神奇宝贝 第一代 可以学习的动作数量 我发现以下网站包含此信息 https pokemondb net pokedex game red blue yellow 这里列出了 151 个 Pokemon 对于每个 Pokemon
  • PHP mysqli_real_escape_string 返回空字符串

    如果我不使用 mysql real escape string 函数 代码可以正常工作 但该函数没有返回任何内容 我读到问题可能是由于我没有 mysql 连接 但情况似乎并非如此 请帮忙
  • shell函数中的“声明”和环境变量的范围

    考虑以下测试片段 这些是文件 declare test 的内容 function do foobar unset FOOBAR declare FOOBAR default FOOBAR override echo At end of do
  • 在 pandas 中生成唯一 ID 列

    我有一个包含三列的数据框 bins x bins y and z 我想添加一个新列unique这是该独特组合的某种 索引 bins x and bins y 以下是我想附加的示例 请注意 为了清楚起见 我对数据框进行了排序 但在此上下文中顺
  • ag-Grid - 在行悬停时显示按钮,就像 Gmail 中一样

    在 ag Grid 中 我想在悬停一行时显示操作按钮 就像在 Gmail 中一样 无论滚动位置如何 操作按钮都必须出现在网格的右端 有提到一种方法https blog ag grid com build email client with