【问题标题】:How to trigger animations in horizontal layout如何在水平布局中触发动画
【发布时间】:2020-12-31 01:18:36
【问题描述】:

我想在水平布局中触发 CSS 动画,只有当动画元素进入视口时。我还想让它们在每次进入视口时触发,而不仅仅是一次。

【问题讨论】:

    标签: javascript css-animations horizontal-scrolling


    【解决方案1】:

    JavaScript Intersection Observer API 可以监视任何滚动方向的元素位置,可以在它们进入/离开视口时对其执行操作,并且可以在每次这些事件发生时重复这些操作。它非常高效且得到很好的支持。这是一个基本示例:

    // Get an array of elements to watch
    let elements = document.querySelectorAll('.foo');
    
    // Set an observer to watch their position relative to the viewport boundaries
    let observer = new IntersectionObserver(function (entries, self) {
        entries.forEach(entry => {
            // If this item is in the viewport
            if (entry.isIntersecting) {
                // Do some code on that item
                entry.target.classList.toggle('animated');
            }
        });
    }, { rootMargin: '0px 0px 0px 0px' });
    
    // Tell each element to be watched
    elements.forEach(el => {
        observer.observe(el);
    });
    

    【讨论】:

    • 感谢您的帮助,我只是不太了解 JavaScript 无法完成这项工作。您能否提供一个工作示例,这是可能的布局:jsfiddle.net/davidxmartins/8ro96stc/15
    • 这是一个新的小提琴。我调整了一些 CSS 属性并删除了 HTML 第一部分的初始类。观察者正在观察部分,因为它们在视口中超过 25% 可见并添加“slideUp”类,并在它们不可见时将其删除。 jsfiddle.net/ks3dwh9p
    • 非常感谢您,我真的很感激。唯一让我不满意的是动画元素在动画发生之前仍然可见的方式。我已通过将它们的初始不透明度设置为 0 来解决此问题。问题是它们通常会消失,而在您滚动时仍能洞察。这个新的小提琴向你展示了我的意思:jsfiddle.net/davidxmartins/3q9dfr8b/19 有没有办法解决这个问题?
    • 我将阈值设置为 0,因此在该部分完全进出视口之前不会触发动画。我还简化了您的 CSS 动画,因为您实际上并不需要关键帧,除非您打算稍后再做一些更复杂的事情。这能解决吗? jsfiddle.net/6asr3u0b
    • 你是最棒的!非常感谢。我认为 0.25 的阈值效果最好。我认为您对动画的调整才是真正解决问题的原因。我已经在我的项目中对其进行了测试,将 translateY 降低到只有 20%,现在一切都按预期执行。你真的让我很开心。最美好的祝愿!
    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2023-03-27
    相关资源
    最近更新 更多