Element UI——滚动条组件(ElScrollBar)修改.el-scrollbar__wrap和el-scrollbar__view的CSS属性
基本概念
el-scrollbar:Element UI隐藏组件。
注意事项:
1.el-scrollbar的父层要有固定高度
2.el-scrollbar的高度要设成100%
3.如果出现横滚动条,添加overflow-x:hidden;
源代码
// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.jsimport { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event';
import scrollbarWidth from 'element-ui/src/utils/scrollbar-width';
import { toObject } from 'element-ui/src/utils/util';
import Bar from './bar';/* istanbul ignore next */
export default {name: 'ElScrollbar',components: { Bar },props: {native: Boolean,wrapStyle: {},wrapClass: {},viewClass: {},viewStyle: {},noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能tag: {type: String,default: 'div'}},data() {return {sizeWidth: '0',sizeHeight: '0',moveX: 0,moveY: 0};},computed: {wrap() {return this.$refs.wrap;}},render(h) {let gutter = scrollbarWidth();let style = this.wrapStyle;if (gutter) {const gutterWith = `-${gutter}px`;const gutterStyle = `margin-bottom: ${gutterWith}; margin-right: ${gutterWith};`;if (Array.isArray(this.wrapStyle)) {style = toObject(this.wrapStyle);style.marginRight = style.marginBottom = gutterWith;} else if (typeof this.wrapStyle === 'string') {style += gutterStyle;} else {style = gutterStyle;}}const view = h(this.tag, {class: ['el-scrollbar__view', this.viewClass],style: this.viewStyle,ref: 'resize'}, this.$slots.default);const wrap = (<divref="wrap"style={ style }onScroll={ this.handleScroll }class={ [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] }>{ [view] }</div>);let nodes;if (!this.native) {nodes = ([wrap,<Barmove={ this.moveX }size={ this.sizeWidth }></Bar>,<Barverticalmove={ this.moveY }size={ this.sizeHeight }></Bar>]);} else {nodes = ([<divref="wrap"class={ [this.wrapClass, 'el-scrollbar__wrap'] }style={ style }>{ [view] }</div>]);}return h('div', { class: 'el-scrollbar' }, nodes);},methods: {handleScroll() {const wrap = this.wrap;this.moveY = ((wrap.scrollTop * 100) / wrap.clientHeight);this.moveX = ((wrap.scrollLeft * 100) / wrap.clientWidth);},update() {let heightPercentage, widthPercentage;const wrap = this.wrap;if (!wrap) return;heightPercentage = (wrap.clientHeight * 100 / wrap.scrollHeight);widthPercentage = (wrap.clientWidth * 100 / wrap.scrollWidth);this.sizeHeight = (heightPercentage < 100) ? (heightPercentage + '%') : '';this.sizeWidth = (widthPercentage < 100) ? (widthPercentage + '%') : '';}},mounted() {if (this.native) return;this.$nextTick(this.update);!this.noresize && addResizeListener(this.$refs.resize, this.update);},beforeDestroy() {if (this.native) return;!this.noresize && removeResizeListener(this.$refs.resize, this.update);}
};
问题分析
通过阅读源码,
scrollbar
组件暴露了native
,wrapStyle
,wrapClass
,viewClass
,viewStyle
,noresize
,tag
这7个 props属性
props: {native: Boolean, // 是否使用本地,设为true则不会启用element-ui自定义的滚动条wrapStyle: {}, // 包裹层自定义样式wrapClass: {}, // 包裹层自定义样式类viewClass: {}, // 可滚动部分自定义样式类viewStyle: {}, // 可滚动部分自定义样式noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能tag: { // 生成的标签类型,默认使用 `div`标签包裹type: String,default: 'div'}
}
注:
wrapStyle和viewStyle必须以分号;结尾。
代码示例
<el-scrollbar wrap-class="list" wrap-style="overflow-x:hidden;" view-class="view-box" view-style="font-weight: bold;height:100%;" :native="false"><el-treeclass="tree":data="menuItems"node-key="id":default-expanded-keys="expandedKeys":default-checked-keys="checkedKeys":props="defaultProps":expand-on-click-node="false":render-content="renderContent"></el-tree>
</el-scrollbar>
运行效果
参考文章
https://www.jianshu.com/p/6538698578f5/
https://blog.csdn.net/zhouweihua138/article/details/80077311
Element UI——滚动条组件(ElScrollBar)修改.el-scrollbar__wrap和el-scrollbar__view的CSS属性相关推荐
- element-ui滚动条组件el-scrollbar
Element的滚动条组件el-scrollbar 在使用ElementUI框架的时候,发现它的官网左侧栏的滚动条不是系统自带的滚动条,查了一下源码发现,还真是有实现了滚动条的功能:Element的滚 ...
- element ui upload组件文件上传一次 后,不论是上传成功之后修改文件再上传还是上传失败重新上传,再次点击上传均无反应。
问题: Element UI Upload 组件文件上传一次 后,不论是上传成功之后修改文件再上传还是上传失败重新上传,再次点击上传均无反应. 原因: 第一次上传文件后,浏览器还保存着我们已经上传的文 ...
- Vue + Element UI——滚动条el-scrollerbar和无限滚动指令v-infinite-scroll整合解决方案
基本概念 el-scrollbar:Element UI隐藏组件. 注意事项: 1.el-scrollbar的父层要有固定高度 2.el-scrollbar的高度要设成100% 3.如果出现横滚动条, ...
- element走马灯自动_vue Element UI走马灯组件重写
1.element ui走马灯组件 -- carousel 分析一波源代码: carousel/src/main.vue 文件为 el-carousel文件主要功能 carousel/src/item ...
- element走马灯自动_[转]vue Element UI走马灯组件重写
1.element ui走马灯组件 -- carousel 分析一波源代码: carousel/src/main.vue 文件为 el-carousel文件主要功能 carousel/src/item ...
- bind-html自动换行,vue element ui this.$alert 样式修改,长词自动换行、自定义htm
vue element ui this.$alert 样式修改,长词自动换行.自定义htm vue element ui this.$alert 样式修改,长词自动换行.自定义html标签无效果 问题 ...
- Vue Element UI 表格组件 利用插槽实现按下按钮后获得本行数据(内容)
Vue Element UI 表格组件 利用插槽实现按下按钮后获得本行数据(内容) 能够解决的问题 需要在表格中添加一个类似修改或编辑的按钮,按下按钮,弹出的窗口需要本行的渲染数据 需要向服务端提交一 ...
- element ui table组件扩展关于列表编辑按钮的位置放置
最近在用vue做项目,主要是用的element ui的组件,在用的过程中发现有部分组件需要扩展,改源码太折腾,成本高,就想着如何节省成本来实现这些需求,由于项目时间紧张,有些实现来也没来得及记录一下, ...
- 实战 | Element UI 父子组件传值与事件绑定(逆向)
这是小小本周的第四篇,本篇将会倒过来讲解Element UI 父子组件传值与事件绑定. 父子组件传值 新建父组件和子组件 新建父组件 代码如下 <template><div id=& ...
最新文章
- 编译linux内核步骤
- storm集群和单点安装
- PyTorch ToTensor解读
- android onresume时view,android – 在使用ViewPager滑动时,Fragment不会调用OnResume()
- 万能系统卸载器免root_这下舒服了!一键卸载安卓全机型预装应用
- Spring 基于注解(annotation)的配置之@Required注解
- sublime text3安装js提示的插件
- REVERSE-PRACTICE-BUUCTF-25
- ScrollView如何判断滑动到底部以及getHeight()方法与getMeasuredHeight()方法的一些理解
- python 累加_对Python实现累加函数的方法详解
- RDV需要什么服务器系统,锐起RDV的教程
- adb 安装apk到指定设备
- 汇聚内容页关键词优化的小窍门
- 宝塔+云锁nginx自编译web防护 防御CC效果极佳
- zbox的测试例——selectAll+selectInverse
- python之pyautogui实现鼠标键盘控制
- 你是阳光,你的世界充满阳光---心在哪,成就就在哪
- 计算关联系数matlab,matlab相关系数计算公式
- 【nacos】com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
- 2021年贵阳六中高考成绩查询,贵阳市第六中学2021年招生简章
热门文章
- 二维动态规划降维误差一般为多少_动态规划 所有题型的总结
- php 定时脚本执行wget无效_写了个Bug,误执行rm fr /*,瞬间背后一凉!
- z最大子数组c语言,关于最大子数组问题
- csharp为何不流行_【经营】做餐饮,算好加减法,你不赚谁赚
- 宝塔执行sh文件_宝塔面板未授权访问
- linux里的挂载错误无法开机怎么办,Linux基础知识 - 开机挂载错误
- php文件名函数,php 获取文件名basename()函数的用法总结
- oracle手工收集awr报告_WHAT——什么是AWR?
- 程序员吐槽_男子吐槽:35岁被裁都是低端程序员,有能力只会是一个新台阶
- 轻松学习,高效学习,那些年大学玩命的学习方法