在翻看 element-ui官网的文档时,发现其左侧导航和右边的内容超出屏幕时,滚动条的样式比较小巧,通过浏览器审查工具查看,发现它是使用了el-scrollbar的样式,跟element-ui的组件样式命名一致。但文档中并没有关于这个 scrollbar组件的使用文档,搜索一番得知这是一个隐藏组件,官方在 github 的 issues 中表示不会写在文档中,需要用的自己看源码进行调用。
1、使用
按需加载需要单独加载Scrollbar组件、并使用(可能会报无Scrollbar类的错误,但不影响使用),el-scrollbar需要设height(max-height是不行的)
<el-scrollbar :native="false">
<div>
<p v-for="(item, index) in 200" :key="index">{{index}} 这里是一些文本。</p>
</div>
<el-scrollbar>
2、配置参数
props: { native: Boolean, // 是否使用本地,设为true则不会启用element-ui自定义的滚动条 wrapStyle: {}, // 包裹层自定义样式 wrapClass: {}, // 包裹层自定义样式类 viewClass: {}, // 可滚动部分自定义样式类 viewStyle: {}, // 可滚动部分自定义样式 noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能 tag: { // 生成的标签类型,默认使用 `div`标签包裹 type: String, default: 'div' } }
3、源码位置
源码在node_modules
目录下的 element-ui/packages/scrollbar
模块入口index.js,从main导入 scrollbar并提供一个安装方法注册成全局组件
注意:隐藏X轴滚动条时,加上前缀,否则会影响el-select的下拉框样式。
.el-scrollbar__wrap {
overflow-x: hidden;
}
4、监听滚动位置
<el-scrollbar id="main" class="app-main" ref="myScrollbar"> <div class="content"> <h3>顶部</h3> </div> <div class="content"> <h3>Transfer 穿梭框</h3> </div> <div class="content"> <h3>Form 表单</h3> </div> <div class="content"> <h3>Table 表格</h3> </div> <div class="content"> <h3>Tag 标签</h3> </div> </el-scrollbar>
new Vue({ el: '#app', data: function() { return { visible: false } }, mounted() { this.handleScroll() }, methods: { handleScroll() { let _self = this let scrollbarEl = this.$refs.myScrollbar.wrap scrollbarEl.onscroll = function() { if(scrollbarEl.scrollTop > 200) { _self.visible = true } else { _self.visible = false } } }, } })