在翻看 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 } } }, } })