element ui的table组件横向滚动条始终位于可视区域

这篇具有很好参考价值的文章主要介绍了element ui的table组件横向滚动条始终位于可视区域。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:表格行数过多,就需要先滚动到表格底部,才能使用横向滚动条,这给用户带来了不便。

思路:在表格内部生成一个自定义横向滚动条,当表格原生的横向滚动条没出现在可视区域范围时,将自定义滚动条调整到视口底部位置,反之隐藏该自定义滚动条。

使用:由于用的是Vue,又涉及到操作Dom,故而把这个功能封装成一个指令,在el-table上添加指令即可。

过程:

main.js(定义全局指令)

//perfect-scrollbar插件的包
import ScrollBar from './direactives/scrollbar'
//对应的css
import 'perfect-scrollbar/css/perfect-scrollbar.css'
//全局指令
Vue.directive('fixed-scroll', ScrollBar)

scrollbar.js

//自定义滚动条
import PerfectScrollbar from 'perfect-scrollbar'
//对应的css
import 'perfect-scrollbar/css/perfect-scrollbar.css'

const updateScrollBar = el => {
  const railX = el.querySelector('.ps__rail-x')
  const _tbody = el //el为表格容器
  // 如果table内部还有滚动条的话需要加上_tbody.scrollTop
  // 视口的高度-tbody基于视口的top值-横向滚动条容器的高度
  const _top = window.innerHeight - _tbody.getBoundingClientRect().top - railX.clientHeight
  railX.style.top = `${_top}px`
  railX.style.opacity = '1'
  railX.style.display = 'block'
}

// 使用插件创建滚动条
const el_scrollBar = el => {
  // 在元素上加点私活,名字随便取,确保不会和已有属性重复即可,取名叫做_ps_
  if (el._ps_ instanceof PerfectScrollbar) {
    el._ps_.update()
  } else {
    // el上挂一份属性
    el._ps_ = new PerfectScrollbar(el, {
      suppressScrollX: false,
      suppressScrollY: true //y方向禁止
    })
  }
}

let isScrolling = false
let _scrollHander = null
let _resizeHander = null

// 自定义vue指令
const directive = {
  // inserted(初次创建dom)获取使用自定义指令处的dom
  inserted(el) {
    el = el.querySelector('.el-table__body-wrapper')
    if (!el) {
      return console.warn('未发现className为el-table__body-wrapper的dom')
    }
    // 判断其样式是否存在position,并且position为"fixed","absolute",或"relative"
    // 如果不符合条件,抛个错误,当然你也可以抛个警告顺便给其position自动加上"relative"
    // 为什么要这样做呢,因为PrefectScrollbar实现原理就是dom注入两个div,一个是x轴一个是y轴,他们两的position都是absolute
    //对css稍有常识的人都知道,absolute是相对于所有父节点里设置了position属性的最近的一个节点来定位的,为了能够正确定位,我们要给其设置position属性
    const rules = ['fixed', 'absolute', 'relative']
    if (!rules.includes(window.getComputedStyle(el, null).position)) {
      console.error(`perfect-scrollbar所在的容器的position属性必须是以下之一:${rules.join('、')}`)
    }
    // el上挂一份属性
    el_scrollBar(el)
    updateScrollBar(el)

    //注册scroll和resize事件
    _scrollHander = () => {
      if (!isScrolling) {
        window.requestAnimationFrame(() => {
          updateScrollBar(el)
          isScrolling = false
        })
      }
      isScrolling = true
    }

    _resizeHander = () => {
      updateScrollBar(el)
    }

    document.addEventListener('scroll', _scrollHander)
    window.addEventListener('resize', _resizeHander)
  },
  // 更新don的时候
  componentUpdated(el, binding, vnode) {
    const { expression } = binding

    el = el.querySelector('.el-table__body-wrapper')
    if (!el) {
      return console.warn('未发现className为el-table__body-wrapper的dom')
    }

    const handler = () => vnode.context[expression].apply()

    // vnode.context其实就是vue实例,这里其实无需实例也直接用vue的静态方法
    vnode.context.$nextTick(() => {
      try {
        el_scrollBar(el)
        updateScrollBar(el)
        if (expression) {
          handler()
        }
      } catch (error) {
        console.error(error)
      }
    })
  },
  unbind() {
    document.removeEventListener('scroll', _scrollHander)
    window.removeEventListener('resize', _resizeHander)
  }
}

export default directive

组件中使用

<el-table :data="deliverTable" border highlight-current-row :header-cell-style="{ background: '#eef1f6', color: '#606266' }" v-loading="listLoading" v-fixed-scroll>

注意:如果表格有固定列,需要给横向滚动条设置高于固定列的层级z-index

App.vue

.ps__rail-x {
  display: block;
  z-index: 999; 
}

实现:当表格底部不在可视区域范围内时,横向滚动条固定在视口底部的位置。

element ui的table组件横向滚动条始终位于可视区域文章来源地址https://www.toymoban.com/news/detail-509630.html

 参考:vue中使用perfect-scrollbar

到了这里,关于element ui的table组件横向滚动条始终位于可视区域的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue+element-ui el-table组件二次封装实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题

    某些页面不做分页时,当数据过多,会导致页面卡顿,甚至卡死 一、固定一个 可视区域 的大小并且其大小是不变的,那么要做到性能最大化就需要尽量少地渲染 DOM 元素,而这个最小值也就是可视范围内需要展示的内容,而可视区域之外的元素均可以不做渲染。 二、如何计

    2024年02月10日
    浏览(63)
  • element-ui table 设置表格滚动条位置

    场景: 在切换不同页面时(被 keep-alive 缓存的组件间切换),页面中的element-ui table的滚动条位置没有停留在原来的位置。目前需要切换不同的页面返回来后,滚动条保持在原来的位置。 代码:

    2024年02月11日
    浏览(55)
  • vue监听element-ui的table表格滚动事件

    这篇文章主要是讲述“如何监听element-ui table滚动事件”,按我自己尝试的方法去实现。 需求分析: 前两天做项目遇到一个问题,数据量大,然后表格渲染的很慢,而且很卡怎么办?有什么优化的方式? 那无非就是两种方法。 先加载一屏表格的数据,之后触底加载新的数据

    2024年02月12日
    浏览(57)
  • element UI table横向树结合checkbox进行多选,实现各个节点的[全选,半选,不选]状态附带模拟数据

    步骤一、后端返回tree格式数据,先结合element-ui的table的数据格式要求,将tree转换成table数据,进行行列的合并。 步骤二、拿到数据,递归遍历后将选中数据的id保存,进行回显操作。 步骤三、将每个checkbox进行绑定方法,此方法将作为分叉,如果当前checkbox属于父亲节点,判

    2024年02月08日
    浏览(60)
  • element-ui table表格 增加合计行 和 表格列固定之后 滚动条无法滚动

    是因为el-table__fixed或el-table__fixed-right有了合计之后把 el-table__body-wrapper层覆盖 el-table__fixed或el-table__fixed-right层级较高 因此点击滚动条失效 解决方法: 若想设置滚动条样式 若想合并合计行的列

    2024年02月15日
    浏览(45)
  • element ui,table设置fixed表格错位,滚动条无法显示问题

    fixed设置了left和right表格固定列错位,滚动条无法显示问题通过设置样式解决 1、固定列错行问题修改  /deep/ .w-table__fixed-body-wrapper{   top: 80px !important; } /deep/ .w-table__fixed{        bottom: 12px !important;        box-shadow:none;   } 2、滚动条无法显示问题 /deep/ .w-table__fixed-right { // 右

    2024年04月23日
    浏览(38)
  • 修改element-ui中的表格el-table的滚动条样式

    一.单独修改element-ui中的表格el-table的滚动条样式(两种方法) 1. 2.  二.保持整个页面的滚动条的风格是一致(直接改全局的滚动条样式) 三.页面内某一组件滚动条样式美化  scroll-bar是需要滚动条组件的元素,类名自定义

    2024年02月11日
    浏览(57)
  • element-ui table表格滚动条拉到最右侧 表头与内容不能对齐

    1.问题概述 当表格数据太多,会出现纵向滚动条和横向滚动条,把横向滚动条拉到最右侧时,会出现表头与内容不能对齐的现象。 2.解决方法 1.当页面数据加载完毕后,在后面加上 2.别忘了给表格加上ref属性

    2024年02月10日
    浏览(41)
  • Element-UI el-table高度不固定,自适应高度显示滚动条

    表格内容过多时显示滚动条:可通过 max-height设置一个固定的数值高度实现,但是项目中的需求是表格的高度不能写死,要自适应高度来显示滚动

    2024年02月11日
    浏览(58)
  • vue中数据滚动显示 实现Element-UI中el-table内数据的懒加载

    工作中我们经常会用到element-ui组件库中的le-table组件来展示数据,但当table的数据源数量过大的时候统一展示可能会出现页面卡顿,且会影响用户体验,为此我们可以尝试对el-table中的数据做懒加载的效果展示: 1. 挂在阶段监听el-table的scroll滚动事件 2. 当table表格滚动条的位置

    2023年04月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包