Scrollbar 滚动条

用于替换浏览器原生滚动条。

基础用法

通过 height 属性设置滚动条高度,若不设置则根据父容器高度自适应。

Scrollbar 滚动条 - 图1

  1. <template>
  2. <el-scrollbar height="400px">
  3. <p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p>
  4. </el-scrollbar>
  5. </template>
  6. <style scoped>
  7. .scrollbar-demo-item {
  8. display: flex;
  9. align-items: center;
  10. justify-content: center;
  11. height: 50px;
  12. margin: 10px;
  13. text-align: center;
  14. border-radius: 4px;
  15. background: var(--el-color-primary-light-9);
  16. color: var(--el-color-primary);
  17. }
  18. </style>

横向滚动

当元素宽度大于滚动条宽度时,会显示横向滚动条。

Scrollbar 滚动条 - 图2

  1. <template>
  2. <el-scrollbar>
  3. <div class="scrollbar-flex-content">
  4. <p v-for="item in 50" :key="item" class="scrollbar-demo-item">
  5. {{ item }}
  6. </p>
  7. </div>
  8. </el-scrollbar>
  9. </template>
  10. <style scoped>
  11. .scrollbar-flex-content {
  12. display: flex;
  13. }
  14. .scrollbar-demo-item {
  15. flex-shrink: 0;
  16. display: flex;
  17. align-items: center;
  18. justify-content: center;
  19. width: 100px;
  20. height: 50px;
  21. margin: 10px;
  22. text-align: center;
  23. border-radius: 4px;
  24. background: var(--el-color-danger-light-9);
  25. color: var(--el-color-danger);
  26. }
  27. </style>

最大高度

当元素高度超过最大高度,才会显示滚动条。

Scrollbar 滚动条 - 图3

  1. <template>
  2. <el-button @click="add">Add Item</el-button>
  3. <el-button @click="onDelete">Delete Item</el-button>
  4. <el-scrollbar max-height="400px">
  5. <p v-for="item in count" :key="item" class="scrollbar-demo-item">
  6. {{ item }}
  7. </p>
  8. </el-scrollbar>
  9. </template>
  10. <script lang="ts" setup>
  11. import { ref } from 'vue'
  12. const count = ref(3)
  13. const add = () => {
  14. count.value++
  15. }
  16. const onDelete = () => {
  17. if (count.value > 0) {
  18. count.value--
  19. }
  20. }
  21. </script>
  22. <style scoped>
  23. .scrollbar-demo-item {
  24. display: flex;
  25. align-items: center;
  26. justify-content: center;
  27. height: 50px;
  28. margin: 10px;
  29. text-align: center;
  30. border-radius: 4px;
  31. background: var(--el-color-primary-light-9);
  32. color: var(--el-color-primary);
  33. }
  34. </style>

手动滚动

通过使用 setScrollTopsetScrollLeft 方法,可以手动控制滚动条滚动。

Scrollbar 滚动条 - 图4

  1. <template>
  2. <el-scrollbar ref="scrollbarRef" height="400px" always @scroll="scroll">
  3. <div ref="innerRef">
  4. <p v-for="item in 20" :key="item" class="scrollbar-demo-item">
  5. {{ item }}
  6. </p>
  7. </div>
  8. </el-scrollbar>
  9. <el-slider
  10. v-model="value"
  11. :max="max"
  12. :format-tooltip="formatTooltip"
  13. @input="inputSlider"
  14. />
  15. </template>
  16. <script lang="ts" setup>
  17. import { onMounted, ref } from 'vue'
  18. import { ElScrollbar } from 'element-plus'
  19. const max = ref(0)
  20. const value = ref(0)
  21. const innerRef = ref<HTMLDivElement>()
  22. const scrollbarRef = ref<InstanceType<typeof ElScrollbar>>()
  23. onMounted(() => {
  24. max.value = innerRef.value!.clientHeight - 380
  25. })
  26. const inputSlider = (value: number) => {
  27. scrollbarRef.value!.setScrollTop(value)
  28. }
  29. const scroll = ({ scrollTop }) => {
  30. value.value = scrollTop
  31. }
  32. const formatTooltip = (value: number) => {
  33. return `${value} px`
  34. }
  35. </script>
  36. <style scoped>
  37. .scrollbar-demo-item {
  38. display: flex;
  39. align-items: center;
  40. justify-content: center;
  41. height: 50px;
  42. margin: 10px;
  43. text-align: center;
  44. border-radius: 4px;
  45. background: var(--el-color-primary-light-9);
  46. color: var(--el-color-primary);
  47. }
  48. .el-slider {
  49. margin-top: 20px;
  50. }
  51. </style>

Scrollbar 属性

属性说明类型可选值默认值
height滚动条高度string / number
max-height滚动条最大高度string / number
native是否使用原生滚动条样式booleanfalse
wrap-style包裹容器的自定义样式string
wrap-class包裹容器的自定义类名string
view-style视图的自定义样式string
view-class视图的自定义类名string
noresize不响应容器尺寸变化,如果容器尺寸不会发生变化,最好设置它可以优化性能booleanfalse
tag视图的元素标签stringdiv
always滚动条总是显示booleanfalse
min-size滚动条最小尺寸number20

Scrollbar 事件

事件名说明参数
scroll滚动时触发的事件滚动距离 { scrollLeft, scrollTop }

Scrollbar 方法

方法名说明参数
scrollTo滚动到一组特定坐标(options: ScrollToOptions | number, yCoord?: number)
setScrollTop设置滚动条到顶部的距离(scrollTop: number)
setScrollLeft设置滚动条到左边的距离(scrollLeft: number)
update手动更新滚动条状态

Scrollbar 插槽

名称说明
自定义默认内容

源代码

组件 Scrollbar 滚动条 - 图5 文档 Scrollbar 滚动条 - 图6

贡献者

Scrollbar 滚动条 - 图7 云游君

Scrollbar 滚动条 - 图8 三咲智子

Scrollbar 滚动条 - 图9 JeremyWuuuuu

Scrollbar 滚动条 - 图10 msidolphin

Scrollbar 滚动条 - 图11 C.Y.Kun

Scrollbar 滚动条 - 图12 kooriookami

Scrollbar 滚动条 - 图13 zz

Scrollbar 滚动条 - 图14 Aex

Scrollbar 滚动条 - 图15 류한경

Scrollbar 滚动条 - 图16 Delyan Haralanov

Scrollbar 滚动条 - 图17 btea

Scrollbar 滚动条 - 图18 bqy

Scrollbar 滚动条 - 图19 啝裳

Scrollbar 滚动条 - 图20 on the field of hope

Scrollbar 滚动条 - 图21 zazzaz

Scrollbar 滚动条 - 图22 Hades-li

Scrollbar 滚动条 - 图23 renovate[bot]

Scrollbar 滚动条 - 图24 qiang