页面向下滚动时元素平滑上升

发布于 2024-09-03 19:43:23 字数 1319 浏览 28 评论 0

vue 指令

VSlideIn.js

const DISTANCE = 150;
const map = new WeakMap();

const ob = new IntersectionObserver((entries) => {
    for (const entry of entries) {
        if (entry.isIntersecting) {
            // 元素与视口相交
            const animation = map.get(entry.target);
            if (animation) {
                animation.play();
                ob.unobserve(entry.target);
            }
        }
    }
})

/**
 * 判断元素是否在视口下方
 * @param el 
 * @returns {boolean}
 */
const isBelowViewPort = (el) => {
    return el.getBoundingClientRect().top - DISTANCE > window.innerHeight;
}

export default {
    mounted(el, binding) {
                // 在视口上方的元素不执行动画
        if (!isBelowViewPort(el)) {
            return;
        }
        const animation = el.animation([
            {
                transform: `translateY(${binding.value}px)`,
                opacity: 0.5
            },
            {
                transform: 'translateY(0)',
                opacity: 1
            }
        ], {
            duration: 500,
            easing: 'ease-in-out',
            fill: 'forwards'
        });
        animation.pause();
        ob.observe(el);
        map.set(el, animation);
    },
    unmounted(el) {
        ob.unobserve(el);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

謌踐踏愛綪

文章 0 评论 0

开始看清了

文章 0 评论 0

高速公鹿

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

热情消退

文章 0 评论 0

白色月光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文