滚动加载组件

<template>
  <div class="list-show" id="scroll" :style="{ height: props.height }">
    <slot></slot>
  </div>
</template>
<script setup>
import { onMounted, ref, onBeforeUnmount, nextTick } from 'vue';
const emit = defineEmits(['onEarth']);

const props = defineProps({
  height: {
    type: String,
    default: '200px',
  },
  offset: {
    type: Number,
    default: -3,
  },
});
const isReachButtom = ref(false);

onMounted(() => {
  let dom = document.querySelector('.list-show');
  dom.addEventListener('scroll', () => autocycle(dom));
});

const autocycle = (dom) => {
  let scrollTop = dom.scrollTop;
  let scrollHeight = dom.scrollHeight;
  let offsetHeight = Math.ceil(dom.getBoundingClientRect().height);
  let currentHeight = scrollTop + offsetHeight;
  if (currentHeight < scrollHeight && isReachButtom.value) {
    isReachButtom.value = false;
  }
  if (isReachButtom.value) {
    return;
  }
  if (currentHeight >= scrollHeight + props.offset) {
    isReachButtom.value = true;
    //可视高度+滚动高度 + 距离底部的触发距离>=实际高度
    console.log("触底");
    emit('onEarth');
  }
};
</script>
<style lang="scss" scoped>
.list-show {
  box-sizing: border-box;
  overflow: auto;
  word-wrap: break-word;
  margin: 0 0;
  white-space: pre-line;
}
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElementUI 提供了一个非常方便的组件 el-infinite-scroll,该组件可以实现滚动加载。以下是使用 el-infinite-scroll 实现滚动加载的基本步骤: 1. 在需要实现滚动加载组件上添加 v-infinite-scroll 指令,例如: ``` <el-table v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="10"> ``` 在这个例子中,我们将 v-infinite-scroll 指令绑定到 loadMore 方法,这个方法会在滚动到底部时被触发。infinite-scroll-disabled 属性表示是否禁用滚动加载,infinite-scroll-distance 属性表示滚动到底部时距离底部的距离。 2. 实现 loadMore 方法,这个方法会在滚动到底部时被触发,例如: ``` loadMore() { this.loading = true; // 开始加载 // 发送请求获取新数据 fetchData().then((data) => { this.data = this.data.concat(data); // 追加新数据 this.loading = false; // 加载完成 }); } ``` 在这个例子中,我们通过 fetchData 方法获取新数据,并将新数据追加到原有数据中。注意在加载数据时要将 loading 状态设置为 true,在加载完成后要将 loading 状态设置为 false。 3. 最后,为 el-infinite-scroll 组件添加样式,例如: ``` .el-table__body-wrapper { max-height: 400px; overflow-y: auto; } ``` 在这个例子中,我们为 el-table__body-wrapper 元素添加了一个最大高度和纵向滚动条,这样当数据量很大时,el-table__body-wrapper 就会出现滚动条,从而实现滚动加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值