解决 Vue element ui 的table水平滚动条固定底部
2019-03-28 11:43
3467 查看
前提条件,需求:
使用vue element UI 的table
由于横向数据比较长,小屏幕电脑会出现水平滚动条,假如每页20条数据,那么我想对第一条数据进行操作,我得先滚动到table最下面,再拉动水平滚动条到最右边,再回滚到最上面,对末尾的操作进行点击。
这样操作太繁琐,所以提出需求:屏幕过小出现水平滚动条时候,将table的水平滚动条固定再屏幕底部。
element ui 的table并没有办法实现,我采用的是window.onresize
思路
1.手写一个固定底部的滚动条,与table的滚动条绑定实现联动,并隐藏table的滚动条.。
2.用window.onresize对浏览器窗口进行监听,用来判断滚动条显示隐藏。
3.计算滑动位移距离和对应比例。
熟悉思路看代码
一、手写个滚动条并定位到底部绑定上事件
data(){ return{ //滚动条参数 newx: "", // 第一次坐标 oldx: "", // 移动的坐标 outBoxWidth: "", // 滚动条长度 moveWidth: "", // 可移动的长度 old_new: { // 滚动条偏移量 left: 0 }, windowWidth: document.body.clientWidth - 280, //table宽度 f: 0, leftstr:'', //滚动条参数 } }
<!-- 滚动条 --> //img是两端的小箭头 <div class="out_box" ref="out_box"> <img style="margin-left:-20px;position:fixed;bottom:0px;" src="http://img.s.youfenba.com/material_thumb/74NGnHkeQs.png"> <div class="in_box" @mousedown="mouseDown" @mouseup="mouseUp" @mouseout="mouseUp" :style="old_new" ref="in_box" > </div> //用ref对里边的灰色滚动条进行绑定,写上对应的事件 <img style="position:fixed;bottom:0px;right:40px;" src="http://img.s.youfenba.com/material_thumb/WTzsMr6RSX.png"> </div>
需要解释下为什么我绑定三个事件
mousedown :在鼠标点击的时候获取初始坐标,并根据鼠标移动距离使滚动条偏移。
mouseout:鼠标移出滚动条的时候,停止计算鼠标坐标,滚动条停止滚动。
mouseup:鼠标抬起的时候,也停止计算鼠标坐标,滚动条停止滚动。
二、设置window.onresize监听浏览器窗口
mounted() { const that = this; window.onresize = function() { //监听浏览器窗口 that.ifmove(); }; this.ifmove();//页面进来先判断 }
ifmove() { let that = this; that.windowWidth = document.body.clientWidth - 280; if (that.windowWidth < 1230) { that.$refs.out_box.style.display = "block"; that.$refs.in_box.style.width = (that.windowWidth / 1230) * that.windowWidth + "px"; //显示区域占百分比,在滚动条显示 that.moveWidth = (1 - that.windowWidth / 1230) * that.windowWidth; //可移动宽度 } else { that.$refs.out_box.style.display = "none"; } },
三、按照比例计算
//滚动条事件 mouseDown(event) { let e = event || window.event; let _self = this; this.f = 1; this.newx = e.clientX; this.leftstr = this.old_new.left this.$refs.in_box.addEventListener("mousemove", function(event) { let e = event || window.event; _self.oldx = e.clientX; _self.moveWidth = (1 - _self.windowWidth / 1230) * _self.windowWidth-parseFloat(_self.leftstr); //模拟滚动条可移动长度 if (_self.f) { _self.old_new.left = _self.oldx - _self.newx <= -parseFloat(_self.leftstr) ? "0px" : _self.oldx - _self.newx >= _self.moveWidth ? _self.moveWidth + parseFloat(_self.leftstr) + "px" : _self.oldx - _self.newx + parseF 20000 loat(_self.leftstr) + "px"; //模拟滚动条偏移量 _self.$refs.scroll.scrollLeft = _self.oldx - _self.newx <= -parseFloat(_self.leftstr) ? 0 : _self.oldx - _self.newx >= _self.moveWidth ?(_self.moveWidth + parseFloat(_self.leftstr))* (1230 / _self.windowWidth) : (_self.oldx - _self.newx + parseFloat(_self.leftstr) ) * (1230 / _self.windowWidth); //实际滚动条偏移量 } }); }, mouseUp() { this.f = 0; },
需要注意的:
1.这里取的1230数值,是table出滚动条的那个值。
2.因为自己写的滚动条跟table的不一样长,所以不能根据写的滚动条偏移距离移动table的滚动条,需要按照比例计算
相关文章推荐
- 【踩坑+实践】 ElementUI +Vue table表头添加tooltip
- 关于vue+element-ui项目的分页,返回默认显示第一页的问题解决
- VueJS ElementUI el-table 的 formatter 和 scope template 不能同时存在
- vue2.0基于vue-cli,element-ui饿了么vue前端开源项目制作vue的树形table,treeTable
- 详解VUE 对element-ui中的ElTableColumn扩展
- 解决vue-cli element-ui打包报错Unexpected token: punc (() [./~/element-ui/packages/row/src/row.js
- 解决 table固定行和列,导致滚动条显示
- 用vue+Element-ui写一个后台管理界面,点击头部导航对应显示下方左侧导航菜单,点击左侧菜单对应显示右边内容,点击右边内容的按钮出现一个新页面依旧能够选中左侧相应菜单,求解决???!!!!
- vue2.0 + element UI 中 el-table 数据导出Excel的方法
- element-ui 中的table的列隐藏问题解决
- vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
- vue elementui table默认显示子表格
- vue使用element-ui的el-input监听不了回车事件解决
- 解决boostrap-table有水平和垂直滚动条时,滚动条滑到最右边表格标题和内容单元格无法对齐的问题
- vue--element-ui--tree组件解决从外部按钮取消选中状态
- vue使用element-ui的el-input监听不了键盘事件解决
- vue将指定区域的表格数据或element-ui中el-table的数据单笔或多笔批量导出excel
- 解决Vue+Element ui开发中碰到的IE问题
- 解决element-ui中el-menu组件作为vue-router模式在刷新页面后default-active属性与当前路由页面不一致问题的方法
- vue+elementui 之 table+pagination