首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery -常量重复动画超时页面

jQuery -常量重复动画超时页面
EN

Stack Overflow用户
提问于 2016-03-23 10:26:35
回答 1查看 22关注 0票数 0

我有以下几点:

HTML:

代码语言:javascript
复制
<span id="flare-1" class="space-flare"></span>
<span id="flare-2" class="space-flare"></span>

jQuery:

代码语言:javascript
复制
// Animate Stars

jQuery(function() {
    var star = jQuery("#flare-1"), degree = 0, timer;
    var star2 = jQuery("#flare-2"), degree = 0, timer;
    rotate();
    function rotate() {

        star.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});  
        star.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});  
        star2.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});  
        star2.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});                      
        timer = setTimeout(function() {
            ++degree; rotate();
        },8);
        setTimeout(function(){
            setInterval(function () {
               star.fadeIn(500).delay(100).fadeOut(1000).delay(4000).fadeIn(1000);
            }, 500);
        },5000); 
        setTimeout(function(){
            setInterval(function () {
               star2.fadeIn(500).delay(100).fadeOut(1000).delay(4000).fadeIn(1000);
            }, 500);
        },3000); 
    }
}); 

以不同的时间间隔激活两颗不同的恒星。如果我把页面打开大约2分钟,浏览器就会超时,说“显示这个页面时出了问题”。

另外,动画逐渐变慢,我不知道为什么,我认为这可能与问题有关。

你知道我做错了什么吗?

这是我的jSFIDDLE

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 10:38:28

每次调用rotate() (每8ms),就启动一个新的setTimeout,它启动一个新的setInterval

仅仅3秒后,第一个375次超时将达到,这将开始375间隔。

我建议连接到setTimeoutsetInterval以显示调用了多少次:

代码语言:javascript
复制
window.originalSetTimeout=window.setTimeout;
window.originalSetInterval=window.setInterval;

window.setTimeout=function(func,delay)
{
    console.log("setTimeout");
    return window.originalSetTimeout(func, delay);
};

window.setInterval=function(func,delay)
{
    console.log("setInterval");
    return window.originalSetInterval(func, delay);
};  

您可能想要将fadeIn/fadeOut代码移出体外旋转():

代码语言:javascript
复制
var star = jQuery("#flare-1");
var star2 = jQuery("#flare-2");
var degree = 0;

rotate();

function rotate() {
    star.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});  
    star.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});  
    star2.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});  
    star2.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});                      
}

setInterval(function() {
    ++degree; 
    rotate();
}, 8);

setTimeout(function(){
    setInterval(function () {
       star.fadeIn(500).delay(100).fadeOut(1000).delay(4000).fadeIn(1000);
    }, 500);
}, 5000); 

setTimeout(function(){
    setInterval(function () {
       star2.fadeIn(500).delay(100).fadeOut(1000).delay(4000).fadeIn(1000);
    }, 500);
}, 3000); 

更新小提琴:https://jsfiddle.net/o9etyqgo/1/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36175540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档