manual-scroll.vue 1.2 KB

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