如何解决表数据复制后高亮效果交替出现的问题?

如何解决表数据复制后高亮效果交替出现的问题?

在数据操作过程中,确保用户能够清晰地看到操作结果至关重要。目前的系统中,用户在点击菜单切换表数据并复制数据后,通过执行copycell方法进行数据复制,随后通过getdata方法获取新的表数据。然而,第一次复制数据后,高亮效果并未按预期显示,而是在第二次复制时才出现,之后的高亮效果显示与否呈现出交替的模式。本文将探讨如何解决这一高亮效果交替出现的问题。

根据提供的代码,复制操作和高亮显示的逻辑主要集中在copyCell和scrollToRow方法中。特别是scrollToRow方法负责处理跳转到指定页面并为对应行添加高亮样式。以下是经过调整的scrollToRow方法,通过这些修改,我们希望能够解决高亮效果的交替问题:

const scrollToRow = (rowKey) => {
  const row = dataSource.value.find((row) => row["ID"] === rowKey);
  const targetIndex = dataSource.value.findIndex(
    (item) => JSON.stringify(item.key) == JSON.stringify(row.key)
  );
  if (targetIndex !== -1) {
    const currentPageSize = paginationConfig.value.defaultPageSize;
    const targetPage = Math.floor(targetIndex / currentPageSize) + 1;
    paginationConfig.value.current = targetPage;
  }
  if (row) {
    setTimeout(() => {
      const tableBody = tableRef.value?.$el.querySelector(".ant-table-body");
      if (tableBody) {
        const rowElement = tableBody.querySelector(
          `table .ant-table-tbody tr[data-row-key="${row.key}"]`
        );
<pre class="brush:php;toolbar:false">    // 移除所有已高亮的行
    const allHighlightedRows = tableBody.querySelectorAll(".highlighted-row");
    allHighlightedRows.forEach(el => {
      el.classList.remove("highlighted-row");
    });

    if (rowElement) {
      // 使用 requestAnimationFrame 确保样式应用在下一帧
      requestAnimationFrame(() => {
        rowElement.classList.add("highlighted-row");

        // 计算并设置滚动位置
        const tableBodyScrollTop = rowElement.offsetTop - tableBody.offsetTop;
        tableBody.scrollTop = tableBodyScrollTop;
      });
    }
  }
}, 100); // 增加延迟时间

} else {
console.warn("未找到指定 rowKey 的行");
}
};

在调整后的scrollToRow方法中,我们采取了以下措施:

  1. 移除所有已高亮的行:通过查询所有带有highlighted-row类的元素,并移除其类名,确保在添加新高亮时不会有冲突。
  2. 使用setTimeout和requestAnimationFrame:增加了一个短暂的延迟时间(100毫秒),确保DOM更新后再进行高亮操作。同时,使用requestAnimationFrame来确保高亮样式的应用发生在下一帧,确保浏览器有时间更新样式。

通过以上调整,我们期望在每次复制数据后,高亮效果都能稳定地显示在对应行上,而不出现交替的情况。这不仅提高了用户体验,也确保了操作反馈的即时性和准确性。

以上就是如何解决表数据复制后高亮效果交替出现的问题?的详细内容,更多请关注骃骐网【www.myinqi.com】。

相关推荐:

如何解决Python安装程序卡在预编译编译环节_关闭杀毒软件或清理缓存文件

pip卡在“Building wheel”或“Resolving packages…”主因是本地依赖解析或C++源码编译,非网络问题;关对进程、手动清缓存目录(如%LOCALAPPDATA%\pip\Cache或~/.cache/pip/Cache)、禁用杀软实时防护可解决多数情况。 Python安装程序卡在“Building wheel”或“Resolving packages…”不是网络慢,而...

如何解决Python测试中数据库连接频繁开闭问题_利用fixture的yield模式

pytest fixture 中用 yield 管理 pymysql 连接更稳,因其确保无论测试是否异常都会执行清理;应避免全局连接池、多次 close、共享连接,并在 yield 前 ping 保活和重置状态。 频繁在 pytest 测试中用 pymysql.connect() 打开又关闭数据库连接,不是“看起来不优雅”的问题,而是会直接拖慢测试执行、触发 MySQL 的 max_connect...

如何解决Python爬虫请求频繁被重定向的问题_设置allow_redirects参数

requests.get() 默认自动跳转(allow_redirects=True)会导致爬虫失效,因反爬系统常利用301/302跳转至验证码页或空页,使你无法获取原始响应头和状态码,进而中断后续逻辑。 为什么 requests.get() 默认会自动跳转,反而导致爬虫失效 因为 requests 默认开启重定向追踪(allow_redirects=True),遇到 301、302 响应时会自动...

如何解决Python字典中Key必须是可哈希对象的问题_使用元组替代列表作为键

字典的key不能是列表,因为列表是可变对象,不可哈希,执行hash([1,2])会直接抛出TypeError;而字典依赖哈希值快速查找,若键可变会导致哈希表失效。 为什么字典的 key 不能是列表 因为 dict 内部依赖哈希值做快速查找,而列表是可变对象,hash([]) 会直接抛出 TypeError: unhashable type: 'list'。只要对象在插入后可能被修改(比如调用 .a...

如何解决Python爬虫在长连接请求中超时的问题_设置合理的timeout参数与重试机制

requests.get()默认不设超时会无限等待,必须用timeout=(connect, read)元组分别控制连接与读取超时,单数值仅作用于读取阶段,连接阶段仍可能卡死。 requests.get() 默认不设超时,长连接请求卡住几小时都可能不报错——必须显式设置 timeout,且不能只填一个数字。 为什么单个 timeout 数值对长连接无效 requests 的 timeout 参数若...

NumPy深拷贝浅拷贝区别_视图(View)与arr.copy()完全复制内存区分

view()不分配新内存而共享数据缓冲区,故修改视图即修改原数组;copy()分配新内存实现一层深拷贝,但object数组需deepcopy才彻底隔离。 为什么 arr.view() 修改原数组? 因为 view() 不分配新内存,只是换了个“眼镜”看同一块内存。它共享数据缓冲区(arr.data),改视图就等于改原数组。 常见错误现象:arr.view().fill(0) 后发现原 arr 全变...

如何解决Python连接远程Linux服务器慢的问题_通过Paramiko优化

根本原因是SSH握手阶段的DNS反向解析;远程sshd配置UseDNS yes时,会对客户端IP执行阻塞式gethostbyaddr()查询,无PTR记录或DNS慢则卡住30秒,Paramiko connect()随之挂起。 根本原因不是代码,而是SSH握手阶段的DNS反向解析。Python用paramiko连接远程Linux服务器时卡在connect()、耗时十几秒甚至超时,大概率不是网络延迟,...