Javascript 清除间隔不起作用

Javascript 清除间隔不起作用,javascript,jquery,timer,setinterval,inview,Javascript,Jquery,Timer,Setinterval,Inview,我正在研究一个非常奇怪和复杂的函数。这个想法是有一个运行滑块的计时器。当滑块悬停(即滑块停止移动)时,此计时器被清除。我还希望在滑块(或者更确切地说,它的父容器)不在视图中时清除计时器。使用插件inview,我可以检查元素是否在视口中。因此,当我看到父元素不再在视口中时,我会清除计时器。然而,这不起作用,我不明白为什么。在悬停时清除计时器确实有效。这是一本书 不工作的部分: $("body > .section").bind('inview', function (event, isInV

我正在研究一个非常奇怪和复杂的函数。这个想法是有一个运行滑块的计时器。当滑块悬停(即滑块停止移动)时,此计时器被清除。我还希望在滑块(或者更确切地说,它的父容器)不在视图中时清除计时器。使用插件inview,我可以检查元素是否在视口中。因此,当我看到父元素不再在视口中时,我会清除计时器。然而,这不起作用,我不明白为什么。在悬停时清除计时器确实有效。这是一本书

不工作的部分:

$("body > .section").bind('inview', function (event, isInView) {
    var $this = $(this);

    if (isInView) {
        // Päuse Twitter slider if it's not in the viewport
        if (!$this.is(".twitter")) {
            clearInterval(timer);
            console.log("Timer cleared");
            $(".twitter .article.focus").addClass("pause");
        } else {
            $(".twitter .article").removeClass("pause");
            startTimer();
            console.log("Timer restart");
        }
    }
});
如您所见,事件记录在控制台中,因此会被触发,但滑块不会停止(如您在控制台中所见:类仍然被分配并删除到.twitter中的.articles。这意味着计时器未被清除。但为什么不清除?我无法理解。计时器是全局设置的,因此这应该不是问题


编辑:哦,显然,清除悬停时的计时器也不起作用……这很奇怪,因为所有的console.log都起作用。
timer
被设置为一个全局变量。

关键是不要启动计时器更多次。只要你到达所关注元素的顶部或底部,并且在y中,inview jQuery插件就会触发inview事件我们的示例是,每次发生这种情况时,您都会启动新的计时器。由于新计时器会替换您已经设置的计时器,因此您将无法跟踪旧计时器,并且无法在之后清除它

尝试提取启动和暂停代码,每次启动时,检查计时器是否已启动。例如:

function startSlider() {
    if (!timer) {
        startTimer();
    }
}

function pauseSlider() {
    clearInterval(timer);
    timer = null;
}

我已经更新了你可以看到它运行的地方。

我可以吻你!非常感谢,也感谢你更新了inview功能,你的方式确实好多了。+1并被接受。希望我能给予更多!我已经盲目地盯着这个数周了!