# 效果图

# 代码

<template>
    <div id="container">
        滑动至底部查看效果
        <div id="load" v-show="state">loading......</div>
        <div class="ani"></div>
    </div>
</template>

<script setup>
import {
    ref,
    onMounted
} from 'vue';
const state = ref(false)
const doFirstTimeFunc = (func, time = 1000) => {
    let t = true;
    let n = null;
    return () => {
        clearTimeout(n)
        if (t == true) {
            func();
            t = false
        }
        n = setTimeout(() => {
            t = true;
        }, time)
    }
}
onMounted(() => {
    window.addEventListener("scroll", onScroll)
})
let fistTime = true;
let time = 1;
let dosomething = () => {
    state.value = true
    if (fistTime) {
        fistTime = !fistTime
        let loading = document.querySelector("#load");
        let letters = loading.textContent.split("");
        loading.textContent = "";
        letters.forEach((letter, i) => {
            let span = document.createElement("span");
            span.textContent = letter;
            span.style.animationDelay = `${i / 10}s`;
            span.classList += "ani"
            loading.append(span);
        });
    }
    setTimeout(() => {
        state.value = false
    }, 3000)
}
let doLess = doFirstTimeFunc(dosomething)
const onScroll = () => {
    let scrollHeight = document.documentElement.scrollHeight;
    let screenHeight = window.screen.height;
    let scrollTop = document.documentElement.scrollTop;
    if (scrollTop >= scrollHeight - screenHeight) {
        doLess()
    }
}
</script>

<style scoped>
#load {
    position: fixed;
    right: 10px;
    bottom: 10px;
}

#load /deep/ .ani {
    display: inline-block;
    font-size: 2em;
    animation: bounce 1.9s ease infinite alternate;
}


@keyframes bounce {
    to {
        transform: translateY(20px);
    }
}
</style>

# 步骤

与信息加载类的组件进行搭配,目前仅作为一种监测滑动的 demo。

# BUG

如果发现 bug 或者其他需求可以联系作者 也十分欢迎 pr 前往 github (opens new window)