覆盖element-plus el-table 排序图标

表格排序图标交互
本文介绍了一种实现表格头部排序图标显示与交互的方法。通过CSS控制图标显示与隐藏,并使用hover效果增强用户体验。当鼠标悬停在表头字段上时,会显示排序图标,并改变背景颜色。

功能需求

  • 默认不显示排序图标
  • 鼠标滑入表头字段时,显示图标,文字与图标均添加背景色,图标默认显示升序
  • 点击升序排序,图标高亮,鼠标移出时仍保留
  • 点击高亮升序图标,变为降序图标并高亮,鼠标移出时仍保留
  • 点击高亮降序图标,变为默认升序图标,鼠标移出隐藏
  • 效果如下
    排序图标效果图

实现方法

  • 为 th.el-table__cell 添加hover 样式,实现背景色高亮
  • 通过 visible 属性控制显示哪个图标
  • 通过table 升序降序状态,高亮图标
  • 代码如下
/* 表格标题排序图标,鼠标移入显示,有排序显示,鼠标移出隐藏 start */

.el-table th.el-table__cell>.cell > span:first-child {
  padding: 0 10px;
  margin: 0 -10px;
}
.el-table th.el-table__cell>.cell:hover > span:first-child {
  background-color: #f7f2ee;
  transition: all .5s;
}
.el-table th.el-table__cell>.cell > span.caret-wrapper {
  visibility: hidden;
  height: 23px;
  flex-direction: row;
  transition: all .5s;
}
.el-table th.el-table__cell>.cell > span.caret-wrapper .sort-caret {
  width: auto;
  height: auto;
}
.el-table th.el-table__cell>.cell > span.caret-wrapper .sort-caret.descending,
.el-table th.el-table__cell>.cell > span.caret-wrapper .sort-caret.ascending  {
  position: absolute;
  border: none;
  font-family:'icomoon' !important ;
  font-style: normal;
  top: 0;
  bottom: 0;
}
/* 降序图标 */
.el-table th.el-table__cell>.cell > span.caret-wrapper .sort-caret.descending::before {
  content:"\e939";
  visibility: hidden;
}
/* 升序图标 */
.el-table th.el-table__cell>.cell > span.caret-wrapper .sort-caret.ascending::before {
  content:"\e93a";
} 
/* 升序时升序高亮 */
.el-table th.el-table__cell.ascending>.cell > span.caret-wrapper .sort-caret.ascending::before {
  color: var(--el-color-primary);
  visibility: visible;
} 
/* 升序时降序隐藏 */
.el-table th.el-table__cell.ascending>.cell > span.caret-wrapper .sort-caret.descending::before {
  visibility: hidden;
} 
/* 降序时降序高亮 */
.el-table th.el-table__cell.descending>.cell > span.caret-wrapper .sort-caret.descending::before {
  color: var(--el-color-primary);
  visibility: visible;
} 
/* 降序时升序隐藏 */
.el-table th.el-table__cell.descending>.cell > span.caret-wrapper .sort-caret.ascending::before {
  visibility: hidden;
} 
/* 有排序时保持背景色 */
.el-table th.el-table__cell.ascending>.cell span,
.el-table th.el-table__cell.descending>.cell span {
  background-color: #f7f2ee;
  visibility: visible;
}

.el-table th.el-table__cell>.cell:hover > span:first-child + span{
  visibility: visible;
  background-color: #f7f2ee;
  transition: all .5s;
}
/* 表格标题排序图标 end */
ElementPlus 的 `el-table` 组件里,可借助 `scoped slot` 来自定义折叠列图标。以下为具体实现步骤与示例代码: ### 实现思路 1. 运用 `scoped slot` 对 `el-table` 的 `expand-icon` 进行自定义。 2. 在 `scoped slot` 里,依据行的展开状态来渲染不同的图标。 ### 示例代码 ```vue <template> <el-table :data="tableData" row-key="id" border lazy :load="load" :tree-props="{ children: 'children', hasChildren: 'isLeaf' }" > <!-- 自定义展开图标 --> <template #expand-icon="{ row, expanded }"> <span v-if="expanded"> <!-- 展开时的图标 --> <el-icon><ArrowDown /></el-icon> </span> <span v-else> <!-- 未展开时的图标 --> <el-icon><ArrowRight /></el-icon> </span> </template> <el-table-column prop="name" label="组织架构名称"></el-table-column> <!-- 其他列 --> </el-table> </template> <script setup> import { ref } from 'vue'; import { ArrowDown, ArrowRight } from '@element-plus/icons-vue'; const tableData = ref([ { id: 1, name: '部门1', isLeaf: false, children: [] }, // 其他数据 ]); const load = (tree, treeNode, resolve) => { // 懒加载逻辑 setTimeout(() => { resolve([ { id: 2, name: '子部门1', isLeaf: true } ]); }, 500); }; </script> ``` ### 代码解释 1. **自定义 `expand-icon`**:借助 `#expand-icon` 这个 `scoped slot` 对展开图标进行自定义。 2. **依据展开状态渲染图标**:在 `scoped slot` 里,利用 `expanded` 变量判断行是否展开,进而渲染不同的图标。 3. **图标组件**:使用 ElementPlus 提供的图标组件,像 `ArrowDown` 和 `ArrowRight` 等。 ### 注意事项 - 要保证已经安装并引入了 `@element-plus/icons-vue` 包。 - 可依据实际需求对图标进行替换或者修改样式。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值