【问题标题】:Best way to use svg animating library vivus with intersection observer将 svg 动画库 vivus 与交叉点观察器一起使用的最佳方法
【发布时间】:2018-08-12 22:37:14
【问题描述】:

我使用 vivus.js 为 SVG 制作动画。我想知道在性能方面,将它与交叉点观察器结合使用的最佳方法是什么。

在我的页面上有几个部分,包括内联 svg。这些 svg 应该在向下滚动页面时进行动画处理,在离开视口时停止并在再次观察容器时重新启动。

它有效,但我不确定这是否是构建 vivus 对象并以这种方式一次又一次地播放它们的最佳方式。 这些解决方案似乎使 Firefox 性能崩溃..

我欢迎所有 cmets、建议和改进建议。

$( document ).ready(function() {
    //Define observed Items
    var myItems = document.querySelectorAll(".observed-item");

    //Define observer Options
    var observeroptions = {
        root: null,
        rootMargin: "-35% 0% -35% 0%",
        threshold: 0,
    };

    //Create new Observer Object
    var observer = new IntersectionObserver(function(entries, observer){
        entries.forEach(function(entry){

//Define Index Variable
var myIndex = $(entry.target).index();


var myvivus = new Vivus("item-svg" + myIndex, {
                    duration: 150,
                    start: 'manual'
                },
                function () {
                   $(entry.target).addClass('callback-item-animation');
                }
            )


            if (entry.intersectionRatio > 0) {

                //Add class to Entry Target
                $(entry.target).addClass("item-animate");
                myvivus.reset().play();

} else {
//Remove animated Class from observed Item
                $(entry.target).removeClass("item-animate");
                myvivus.stop().reset();

            }

        });
    },observeroptions);

    myItems.forEach(function(myItem) {
        observer.observe(myItem);
    });

});

我创造了一支笔:

https://codepen.io/Milenoi/pen/JBxgOG

请注意:没有 Polyfill 可以在 Chrome + Firefox 中使用

如您所见,动画没有按预期工作,svg 动画应该在离开观察者时停止并重新开始 wenn 元素再次相交..

【问题讨论】:

    标签: intersection-observer vivus


    【解决方案1】:

    你的提升观察者并在函数中与它发生冲突。在observer =之前添加var或let,然后将该函数中的observer名称更改为唯一的名称。还可以使用窗口限定所有内容。或上下文。这应该会稍微提高性能

    【讨论】:

    • 我没有发布我的完整代码。观察者被包裹在 $( document ).ready(function() { ... 我会按照你的建议使用 var 但我的主要问题是 SVG 的动画。我不知道如何定义一个 vivus 对象,开始或结合路口观察器重置或停止它。
    • 我尽我所能处理我必须回应的事情。让我知道您仍然需要帮助的地方,因为我告诉您的内容似乎仍然适用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2020-11-09
    • 2021-07-20
    相关资源
    最近更新 更多