0

我正在尝试弄清楚如何使这个计数器工作。播放了一定数量的动画后,我想让页面刷新。我知道我的代码很烂。我没有受过这方面的教育,而且我很新,更不用说很难集中精力(至少可以说)我现在住的地方......所以要友善。这里是:

$(document).ready(function () {
    function loop() {
        var p = 0;
        if (p = 3) {
            location.reload(true);
        } else {
            $("#p3").delay("1000").fadeIn("slow");
            $("#p3").delay("1000").fadeOut("slow", loop);
            p + 1;
        };
        loop();
    });
4

2 回答 2

2

您的if (p = 3)语句使用赋值运算符=而不是比较运算符===or ==。因此p被分配给3,其结果是真实的,因此该else语句永远不会执行。

此外,您的p变量是在loop()函数内部声明的,因此每次调用函数时都会重置它 - 您可以将该声明移至函数之前(将其保留在文档就绪处理程序中:无需使其成为全局变量)。

该行p + 1;也没有做任何事情:它不会增加p,因为您需要将结果分配回pwith p = p + 1,它的简写是 isp += 1或 just p++

最后,您发布的代码存在语法错误:您缺少函数的关闭}loop()我猜目的是结束函数然后调用它,所以:

$(document).ready(function () {
    var p = 0;  // <--- moved outside function
    function loop() {
        if (p === 3) {   // <-- changed = to ===
            location.reload(true);
        } else {
            $("#p3").delay("1000").fadeIn("slow");
            $("#p3").delay("1000").fadeOut("slow", loop);
            p++; // <-- changed from p + 1
        };
    } // <--- this is the missing bracket
    loop();
});
于 2013-02-03T12:16:22.007 回答
1

我做了一些假设并写了我认为你想要的,代码未经测试。:

将其更改为:

$(document).ready(function () {
    var globalP = 0;
     //this is called when fadeOut completes.
    function fadeComplete() {
       if (globalP == 3) {//if it is 3 reload..
            location.reload(true);
        } else {
            globalP++;//increment counter 
            animate();//start animation again...
        }
    }
    function animate() {
       //start fading in...
       $("#p3").delay("1000").fadeIn("slow", function() {
           //start fading out when the fadeIn completes.
            //should this happen? Since you're fading in the SAME element.
          $("#p3").delay("1000").fadeOut("slow", fadeComplete);
       });
    };
    animate();
});
于 2013-02-03T12:09:00.617 回答