如何解決表數據復制后高亮效果交替出現的問題?

如何解決表數據復制后高亮效果交替出現的問題?

在數據操作過程中,確保用戶能夠清晰地看到操作結果至關重要。目前的系統中,用戶在點擊菜單切換表數據并復制數據后,通過執行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來確保高亮樣式的應用發生在下一幀,確保瀏覽器有時間更新樣式。

通過以上調整,我們期望在每次復制數據后,高亮效果都能穩定地顯示在對應行上,而不出現交替的情況。這不僅提高了用戶體驗,也確保了操作反饋的即時性和準確性。

如何解決表數據復制后高亮效果交替出現的問題?

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享