加载页面后延迟执行函数的JavaScript

时间:2011-02-25 14:36:38

标签: javascript

我写了这个javascript来制作动画。它在主页上运行良好。我在最后写了一条警告信息。

如果我转到其他主页,则此警报消息必须到来,但是我收到警告消息,如果我删除该功能,警报消息在所有页面上工作,我的代码中有什么问题吗?

window.onload = function(){

    var yellows = document.getElementById('magazine-brief').getElementsByTagName('h2');
    var signUp = document.getElementById('signup-link');

        if (yellows != 'undefined' && signUp != undefined){
            function animeYellowBar(num){
                setTimeout(function(){
                    yellows[num].style.left = "0";
                    if(num == yellows.length-1){
                        setTimeout(function(){
                            signUp.style.webkitTransform = "scale(1)";
                        },num*250);
                    }

                }, num * 500);
            }
            for (var i = 0; i < yellows.length; i++){
                animeYellowBar(i);
            }
        }

    alert('hi');

}

2 个答案:

答案 0 :(得分:2)

  
var yellows,signUp;
window.onload = function() {
    yellows = document.getElementById('magazine-brief').getElementsByTagName('h2');
    signUp = document.getElementById('signup-link');
    if (yellows !== undefined && signUp !== undefined) {
        for (var i = 0; i < yellows.length; i++) {
            animeYellowBar(i);
        }
    }
  alert('hi')
}
function animeYellowBar(num) {
    setTimeout(function() {
        yellows[num].style.left = "0";
        if (num == yellows.length - 1) {
            setTimeout(function() {
                signUp.style.webkitTransform = "scale(1)";
            },
            num * 250);
        }
    },
    num * 500);
}
  
$(function() {
    $("#magazine-brief h2").each(function(i,item) {
          $(this).delay(i+'00').animate({'marginLeft': 0 }, 500 ,function(){
           if ( i === ( $('#magazine-brief h2').length - 1 ) )
             $('#signup-link')[0].style.webkitTransform = "rotate(-2deg)";
          });
    });
});

答案 1 :(得分:1)

对于初学者而言,你没有清除你的SetTimeout,你在这之后真的是什么?你有2个匿名方法,一个在半秒后触发,另一个触发后四分之一秒。

所以这只是2个延迟函数调用,语法可怕。

已编辑两种可能性,一种修复您当前的代码...后者向您展示了如何使用JQuery进行修改,我建议您这样做:

var yellows, signUp;

window.onload = function(){
    yellows = document.getElementById('magazine-brief');
    if(yellows != null){
        yellows = yellows.getElementsByTagName('h2');
    }else{
        yellows = null;
    }
    signUp = document.getElementById('signup-link');

    if (yellows != null && signUp != null && yellows.length > 0)
    {
        for(var i = 0; i < yellows.length; i++)
        {
            animeYellowBar(i);
        }
    }
    alert('hi');
}

function animeYellowBar(num)
{
    setTimeout(function(){
        yellows[num].style.left = "0";
        if(num == yellows.length-1){
            setTimeout(function(){
                signUp.style.webkitTransform = "scale(1)";
            },num*250);
        }
    }, num * 500);
}

以下方法是如何使用JQuery的摘要,如果你想使用JQuery我会实际测试它:

//Or using JQuery
//Onload equivelent
$(function(){
    var     iterCount = 0,
        maxIter = $("#magazine-brief").filter("h2").length;
    $("#magazine-brief").filter("h2").each(function(){
        setTimeout(function(){
            $(this).css({left: 0});
            if(iterCount == (maxIter-1))
            {
                setTimeout(function(){  
                    signUp.style.webkitTransform = "scale(1)";
                    },iterCount*250);
            }
        }, iterCount++ * num );
    });
});