naiveui的table实现可滚动的恒居中空数据处理

12 篇文章 0 订阅
1 篇文章 1 订阅

实现方式

~~
先放一个实现效果截图:
请添加图片描述
naive-ui table 实现空数据页面的滚动、暂无数据恒居中效果

问题详情: naive-ui的原逻辑时空数据页面只有居中的暂无数据字样,不支持横向滚动
解决方案: 既然自带的table不支持滚动,那就自己写空数据页面往里面插

  1. 首先将自己手写的空数据页面替换自带的页面(组件支持空数据插槽):
    在这里插入图片描述

  2. 其次由于表头有快20列,并且我们使用的时固定表头,拖动下方的滚动条无法同步表头的滚动。所以在空数据div的滚动事件中我们要做好处理
    获取表头的el之后将滚动事件target解析出来把scrollleft的值赋值上
    在这里插入图片描述

  3. 这样拖动空数据的滚动条表头也会同步滚动了,但是还差最后一步。需要将暂无数据文案或图标进行恒居中。所以我使用的是绝对定位来实现的
    在这里插入图片描述
    根据scrollbar进行left 移动50% 并减去 自身的50% 实现居中, 由于是绝对定位 所以无论滚动条如何滚动都可以实现暂无数据的居中效果了

实现代码

纯代码区域

      <n-data-table
        remote
        :render-cell="renderCell"
        :scroll-x="getTableWidth"
        :columns="columns"
        :data="data"
        :pagination="pagination"
        :max-height="getTableMaxHeight"
        :loading="loadingRef"
        class="log-table-el"
        @update:page="handlePageChange"
      >
        <template #empty>
          <n-scrollbar x-scrollable @scroll="emptyScroll">
            <div :style="getEmptyTableTextPosition">
              <div :style="setTextPosition.value">暂无数据</div>
            </div>
          </n-scrollbar>
        </template>
      </n-data-table>
      
// 暂无数据文字样式,为了达到文字永远居中使用与scrollbar的定位
const emptyTextStyle = {
  lineHeight: '100px',
  height: '100px',
  width: '100px',
  position: 'absolute',
  left: '50%',
  transform: 'translate(-50%, 0)',
};

const tableHeaderEl: any = reactive({
  value: {},
});

const setTextPosition: any = reactive({
  value: {
    ...emptyTextStyle,
  },
});

onMounted(() => {
  tableHeaderEl.value = document.getElementsByClassName('n-data-table-base-table-header')[0];
});

// naiveui不支持暂无数据宽表格滚动,所以监听空数据div滚动条事件
// 将事件的滚动条长度赋值给header则达到同步滚动的效果
const emptyScroll = (event: any) => {
  const { target } = event;
  tableHeaderEl.value.scrollLeft = target.scrollLeft;
  setTextPosition.value = {
    ...emptyTextStyle,
  };
};


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值