Vue 自适应高度表格的实现方法
这篇文章主要介绍了Vue 自适应高度表格的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前言
示例版本为 Element-ui 2.13.1 + Vue 2.6.11
在使用过程中 表格 是必不可少的一个控件,用于展示数据,单页数据量过多就会导致浏览器自动生成右侧滚动条。
如果页面有头部信息或查询按钮,移动滚动条后会遮挡住这些操作和信息内容。
Element-UI 中的 el-table 提供了设置高度的选项,在代码中设置 height 属性就可以现在表格的高度,数据量过多也只会在表格内部生成滚动条,而不是整个页面生成滚动条。
但是这个高度需要固定的数值,不同的分辨率或者缩放后的浏览器使用固定高度后,不能满足只在 el-table 内部生成滚动条的条件。
方案一:
想要满足上述条件就需要使用 v-adaptive
指令了。
Vue 自定义指令
你可能会好奇 v-adaptive
是在哪里来的?它是自定义的指令,设置表格高度需要对普通 DOM 元素进行底层操作。Vue 除了核心功能默认内置的指令 ( v-model
和 v-show
),也允许注册自定义指令,相关 Api 可以查看 官方文档 。
v-adaptive
新建包名 src/directive/el-table
,创建 adaptive.js
。页面缩放的监听是使用的 element-ui
中的 resize-event
,将 addResizeListener
和 removeResizeListener
引入进来。自定义指令要用到的钩子函数:
- bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
- inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
- unbind:只调用一次,指令与元素解绑时调用。
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'// 设置表格高度const doResize = async(el, binding, vnode) => {// 获取表格Dom对象const { componentInstance: $table } = await vnode// 获取调用传递过来的数据 const { value } = bindingif (!$table.height) {throw new Error(`el-$table must set the height. Such as height='100px'`)}// 获取距底部距离(用于展示页码等信息)const bottomOffset = (value && value.bottomOffset) || 30if (!$table) return// 计算列表高度并设置const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset$table.layout.setHeight(height)$table.doLayout()
}export default { // 初始化设置bind(el, binding, vnode) { // 设置resize监听方法el.resizeListener = async() => { await doResize(el, binding, vnode)} // 绑定监听方法到addResizeListeneraddResizeListener(window.document.body, el.resizeListener) }, // 绑定默认高度async inserted(el, binding, vnode) { await doResize(el, binding, vnode) }, // 销毁时设置unbind(el) { // 移除resize监听removeResizeListener(el, el.resizeListener) }
}
接下来,需要将写好的逻辑绑定到 Vue 中,在同一目录下新建 index.js
:
import adaptive from './adaptive'const install = function(Vue) { // 绑定v-adaptive指令Vue.directive('adaptive', adaptive)
}if (window.Vue) {window['adaptive'] = adaptive // eslint-disable-next-line no-undef Vue.use(install)
}adaptive.install = installexport default adaptive
在单页面使用
指令相关代码已经写好了,接下来就是该如何使用了。找到想要设置表格自适应高度的 vue 文件,在 script
标签下引入自定义的指令并绑定。
import adaptive from '@/directive/el-table'
export default { name:'Test',directives: { adaptive },... ...
}
然后找到表格所在的标签添加指令相关的代码:
<el-table ref="table"// 自定义指令,bottomOffset 代表距离底部的距离v-adaptive="{bottomOffset: 85}"// 高度属性,100无具体意义,仅为初始值,不可省略height="100px" >... ...</table>
全局使用
如果存在多个页面需要设置自适应高度,为了减少使用指令的复杂度,我们可以在 main.js
中全局引入自定义的指令,上述 script
的内容就不需要在每个页面进行写入了。
import adaptive from './directive/el-table'Vue.use(adaptive)
方案二:
resizeTable() {setTimeout(() => {const table = this.$refs.tableconst height = window.innerHeight - table.$el.offsetTop - 60table.layout.setHeight(height)}, 0)}
Vue 自适应高度表格的实现方法相关推荐
- 微信小程序的swiper轮播图中的图片设置自适应高度的一种方法
微信小程序的swiper轮播图中的图片设置自适应高度的一种方法 小程序中的轮播图很简单,但是唯一的缺陷就是 swiper 是固定的150px 高度(320px 宽度),这样如果传入的图片大于这个高度就 ...
- 自适应高度表格_React实现自适应高度的lt;textareagt;
先看东西 我们要实现一个自适应高度的,如下: https://oonne.github.io/react-textarea/build/ 思路 ,文本区域,在表单中经常要用到.使用rows属性可以定义 ...
- 自适应高度表格_【干货分享】Word制作表格,这几个技巧必须要学会!
快点这里订阅最有趣有料的3D/VR/AR/Ai数字化资讯 如果你对Word不是很熟练,那制作表格起来可能特别费劲.这里,就给大家分享几个,必须要掌握的制表技巧. 01表格前面加空行 制作好表格以后,如 ...
- QComboBox下拉框文字如何在字体变大之后自适应高度
一.简述 一般我们给QComboBox设置完字体之后,在显示上并没有什么问题如下图. a.正常状态 由于程序在最大化的时候,因为主窗口尺寸变大,需要整体改变所有控件的尺寸,文字的大小,所以在窗口最大化 ...
- vue移动端表格吸顶、行自适应高度、列左侧固定悬浮
简介 1.表头吸顶效果 2.左侧列固定,右侧滑动,表头跟随内容滑动 3.行高自适应 番外 最近上海疫情,居家办公一月多了,愿阴霾散去.最近网上在正常得市民抱怨中,有很多别有用心之人,数典忘祖,造谣生事 ...
- vue vue的table表格自适应_vue table autoHeight(vue 表格自动高度)
小编主要做的都是后台管理系统,采用布局多为头部.左侧菜单栏,右侧内容,头部和菜单栏固定位置,内容部分如果很长就会出现滚动条(iview和element都提供了布局容器),后台管理系统多为表格的增删改查 ...
- alter table add column多个字段_ElementUI表格el-table表头固定自适应高度解决方案
一.前言 ElementUI.iView都以相同的方式提供了表格组件表头固定的方法,即设置组件的height属性.表头固定很重要,就在于当表格数据项很多时,滚动条出现在表格组件内,而不是出现在表格组件 ...
- layui的轮播图片自适应大小_解决Layui 表格自适应高度的问题
解决Layui 表格自适应高度的问题 鄙人在写一个项目,发现成功将数据在页面显示后, 高度没有自适应,而是将一些按钮遮挡了,不断的调试和网上寻找解决办法,发现没有效果,最后添加了一句css .layu ...
- html表格高度自动调整,table表格自适应高度的办法
这篇文章主要为大家详细介绍了table表格自适应高度的办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 关于自适应高度,361源码在以前给大家介绍过ifram ...
最新文章
- appium python框架结构,GitHub - wyybingo/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...
- java jni key_JNIKeyProtection
- WINDOWS SERVER 2003从入门到精通之配置DHCP服务器(下)
- JSValidation 配置文件
- 卷积转换为矩阵运算中填充数的计算-GEMM
- numpy.newaxis详解
- 当我们在谈深度学习时,到底在谈论什么(三)--转
- 使用资源文件绘制Win32对话框
- 带项目的一些体会以及合格的 Leader 应该具备什么特质?(转)
- MAC系统使用Homebrew安装nvm
- Go三种方式创建赋值map
- java迪杰斯特拉算法介绍_178-迪杰斯特拉(Dijkstra)算法基本介绍
- 美团点评移动端基础日志库——Logan
- 操作系统之进程管理:13、吸烟者问题
- Qt5Widgetsd.lib(Qt5Widgetsd.dll) : fatalerror LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突
- 雨林木风SP3YN9.9 装机版09年09月更新(终结版)
- Web_php_unserialize,XCTF-Web_php_unserialize
- 汉字转拼音函数SQLSERVER数据库
- 实数在计算机上存储,实数如何在内存中存储
- iOS Healthkit 使用探索分析
热门文章
- [谨记]女人面前莫谈年龄
- DBN深度信念网络算法
- 水文预报中的确定性系数如何计算确定
- leetcode总结
- 被多次定义,第一次再次定义
- 微信分享连接个别手机、ios转发不显示图片的,缩略图不出来
- 龙讯系列视频转换,LT9211,LT8918,功能:lvds转BT656,lvds转mipi(CSI\DSI)RGB转MIPI(DSI\CSI) BT656\601\1120转HDMI1.4\DVI
- mp2 解码器kjmp输出32bit
- Certbot nginx证书 or not Let‘s Encrypt
- 家里Wifi网速突然变慢,一招瞬间提速