SetInterval 时间不正确 运行

SetInterval times not running correctly

我继承了一个要查看的错误,该错误由 "flip" 的两个图像组成,并在发生这种情况时使用设置的时间间隔。

据我所知,初始更改应该在 4 秒后发生,然后每 12 秒更改一次图像(显然这在当时并不重要)。

目前,第一张图像在 4 秒时更改,第二张图像在 8 秒左右更改。

我也愿意接受可以对此代码进行的任何改进。

//SPINNING LOGO
        if ($("#flipLogo").length) {
            function spinLogo() {
                $('#flipLogo').addClass("active");
                $('#flipLogo2').addClass("active");
//                console.log("yup yup");
                setTimeout(function () {
                   $('#flipLogo').removeClass("active");
                   $('#flipLogo2').removeClass("active");
                }, 4000);
                clearInterval();
            }
            setInterval(function () {
                spinLogo();
                clearInterval();
            }, 12000);
        }

我相信您正在寻找 $.toggleClass 在活动状态之间切换。
此外,正如 Hacketo 所说,您调用 clearInterval 错误 - 如果您想 stop 间隔,则应使用 setInterval 的 return 值调用它(我不你认为你不想这样做吗?) 试试这个:

//SPINNING LOGO
function spinLogo() {
    // Flip the active classes on or off
    $('#flipLogo').toggleClass("active");
    $('#flipLogo2').toggleClass("active");
}
if ($("#flipLogo").length) {
    // after 4 seconds
    setTimeout(function() {
        // flip the logo
        spinLogo();
        // Set a timer to flip it again every 12 seconds
        setInterval(spinLogo, 12000);
    }, 4000);
}

这是实际操作:

//SPINNING LOGO
function spinLogo() {
  // Flip the active classes on or off
  $('#flipLogo').toggleClass("active");
  $('#flipLogo2').toggleClass("active");
}
if ($("#flipLogo").length) {
  // after 4 seconds
  setTimeout(function() {
    // flip the logo
    spinLogo();
    // Set a timer to flip it again every 12 seconds
    setInterval(spinLogo, 12000);
  }, 4000);
}
.flippable {
  width: 100px;
  height: 100px;
  border: 1px solid black;
  text-align: center;
  display: none;
  color: white;
}
.flippable.active {
  display: block;
}

#flipLogo {
  background: blue;
}
#flipLogo2 {
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="flipLogo" class="flippable active">Logo 1</div>
<div id="flipLogo2" class="flippable">Logo 2</div>

(ps 在 if 语句中定义函数是错误的形式,如 hoisting will move them them to a place you might not expect)