【问题标题】:Memory problems with JavaScript + CSS3 animations. How to improve?JavaScript + CSS3 动画的内存问题。怎么提高?
【发布时间】:2022-01-18 04:58:01
【问题描述】:

我创建了一个动画循环。一旦一个动画完成,它就会触发下一个动画,依此类推。似乎当我保持浏览器打开 1-2 分钟时,它开始变慢并消耗越来越多的资源,直到我的浏览器响应缓慢并且动画几乎不再运行。我怎样才能防止这种情况发生?这是我的代码:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
html, body {
    margin: 0;
}
.shared {
    position: absolute;
    opacity: 0;
}
img#article-02 {
    top: 0;
    left: 0;
    width: 205px;
    height: 205px;
}
img#article-03 {
    top: 227px;
    left: 0;
    width: 205px;
    height: 205px;
}
img#article-04 {
    top: 318px;
    left: 227px;
    width: 431px;
    height: 114px;
}
@-webkit-keyframes article2 {
0%   {opacity: 0;}
10%  {opacity: 1;}
60%  {opacity: 1;}
70%  {opacity: 0;}
100% {opacity: 0;}
}
@-webkit-keyframes article3 {
0%   {opacity: 0;}
20%  {opacity: 1;}
70%  {opacity: 1;}
80%  {opacity: 0;}
100% {opacity: 0;}
}
@-webkit-keyframes article4 {
0%   {opacity: 0;}
30%  {opacity: 1;}
80%  {opacity: 1;}
90%  {opacity: 0;}
100% {opacity: 0;}
}
</style>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    animArticle02();
});

function animArticle02() {
    $("#article-02").css('-webkit-animation', 'article2 2s linear');
    var $element = $("#article-02").bind("webkitAnimationEnd", function(){
        this.style.webkitAnimationName = "";
        animArticle03();
    });
}
function animArticle03() {
    $("#article-03").css('-webkit-animation', 'article3 2s linear');
    var $element = $("#article-03").bind("webkitAnimationEnd", function(){
        this.style.webkitAnimationName = "";
        animArticle04();
    });
}
function animArticle04() {
    $("#article-04").css('-webkit-animation', 'article4 2s linear');
    var $element = $("#article-04").bind("webkitAnimationEnd", function(){
        this.style.webkitAnimationName = "";
        animArticle02();
    });
}
</script>
</head>
<body>
<img id="article-02" class="shared" src="article-02.png" alt="" />
<img id="article-03" class="shared" src="article-03.png" alt="" />
<img id="article-04" class="shared" src="article-04.png" alt="" />
</body>
</html>

【问题讨论】:

    标签: javascript jquery memory-leaks css-animations


    【解决方案1】:

    这可能与重复绑定和 jQuery 调用有关。试试这个脚本:

    //shorthand .ready()
    $(function() {
    
        //cache elements
        var ar2 = $("#article-02"),
            ar3 = $("#article-03"),
            ar4 = $("#article-04");
    
        //bind once
        ar2.bind("webkitAnimationEnd", function() {
            this.style.webkitAnimationName = "";
            animArticle03();
        });
        ar3.bind("webkitAnimationEnd", function() {
            this.style.webkitAnimationName = "";
            animArticle04();
        });
        ar4.bind("webkitAnimationEnd", function() {
            this.style.webkitAnimationName = "";
            animArticle02();
        });
    
        //animate
        function animArticle02() {
            ar2.css('-webkit-animation', 'article2 2s linear');
        }
    
        function animArticle03() {
            ar3.css('-webkit-animation', 'article3 2s linear');
        }
    
        function animArticle04() {
            ar4.css('-webkit-animation', 'article4 2s linear');
        }
    
        animArticle02();
    });​
    

    【讨论】:

    • 动画现在已经运行了 10 分钟,并且仍然运行流畅,所以这似乎解决了问题。非常感谢!
    【解决方案2】:

    “transition”和“-webkit-keyframes”都会导致 Chrome 内存泄漏。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2015-01-02
    • 2013-11-12
    相关资源
    最近更新 更多