Vue2 Ant Design Vue 让table底部滚动条随着屏幕大小显示与隐藏,并在小屏幕时固定最右边的一列

349 阅读2分钟

需求:在大屏幕时、台式电脑上,显示table表格全部的列

image.png 在小屏幕、笔记本电脑上,显示滚动条,并固定最右边的一列

image.png 要能实时根据浏览器窗口的大小动态显示,这要怎么做呢?


首先,定义一个变量

screenWidth:window.innerWidth//接受用于获取当前浏览器窗口的视口宽度

window.innerWidth用于获取当前浏览器窗口的视口宽度(不包括浏览器工具栏、滚动条等占用的空间)。该属性返回的是一个数值(单位是像素),可以用于实现响应式布局或根据窗口尺寸调整页面元素大小等功能。

然后,在table的scroll属性加上

:scroll="screenWidth<=1366?{x:1800}:{}"//浏览器视口宽度小于1366就显示滚动条,否则不显示

这时候就能实现table底部滚动条根据屏幕大小显示与隐藏了。
但是想要实现动态显示我们要怎么做呢? 我们可以在created选项中设置一个监听器,动态的为screenWidth赋值

created(){
window.addEventListener('resize', () => {
  this.screenWidth = window.innerWidth
})
}

别忘记在组件销毁阶段移除监听器哦!

beforeDestroy () {
  window.removeEventListener('resize', () => {
    this.screenWidth = window.innerWidth
  })
},

嗯,我们实现了滚动条动态的根据屏幕大小显示与隐藏了。

最后一个需求,固定最后一列 我们设置一个侦听器

watch:{
  screenWidth:function(){
  //直接修改数组对象中的元素,视图不会发生更新哦,所以要使用Vue提供的特殊方法$set
    this.$set( this.columns[this.columns.length-1],'fixed',this.screenWidth<=1366?'right':false)
  }
},

这个侦听器检测screenWidth的值发生变化,当浏览器视口小于1366时,就给colums列数组的最后一项的属性对象上添加fixed:'right'. 大功告成。


如果表格的最后一项是通过push方法推入的:

  this.columns.push({
      title: '操作',
      fixed: this.screenWidth <= 1366 ? 'right' : '',//那么就不需要设置侦听器了,直接在列数组这里设置就好了
      dataIndex: 'action',
    })

因为当使用以下方法操作数组时,Vue会自动进行视图更新:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

这些方法都会修改原数组,而且 Vue 在修改数组时会触发 view 的更新,因此代码中不需要显式调用视图更新方法。


当时这些困扰了我好一会呢,现在回顾过来思路变清晰了

是不是很简单呢?快去试试吧