一、效果图

二、组件xscroll
<template>
<div ref="scrollEle" :style="scrollStyle" @scroll="onScroll">
<slot></slot>
</div>
</template>
<script setup>
import {
ref
} from 'vue'
const emit = defineEmits(['scroll'])
const scrollEle = ref(null)
const props = defineProps({
scrollStyle: Object
})
const onScroll = () => {
if (scrollEle.value) {
let {
scrollHeight,
clientHeight,
scrollTop
} = scrollEle.value
if (scrollHeight == clientHeight + scrollTop) {
console.log('到底了')
emit('scroll')
}
}
}
</script>
<style scoped>
</style>
三、使用
<x-scroll :style="{border: '1px solid', overflowY: 'auto', 'height': '400px'}" @scroll="onScroll2">
<div style="line-height: 50px;" v-for="(item,index) in list" :key="index">
{{item}}
</div>
</x-scroll>
<script setup>
import {
ref,
inject,
reactive,
onMounted
} from 'vue'
import XScroll from './XScroll.vue';
const list = reactive([])
const targetElement = ref(null)
const onScroll2 = () => {
getList()
}
const getList = () => {
setTimeout(function(){
var len = list.length;
console.log(len)
for(var i = len; i < len + 15; i++) {
list.push(i);
}
}, 1000)
}
onMounted(() => {
getList()
})
</script>