使用 setinterval 和 clearinterval 在 mouseleave 开始动画并在 mouseenter 停止

Start animation on mouseleave and stop on mouseenter using setinterval and clearinterval

我正在使用 materialize 轮播,它使用 setInterval() 自动更改幻灯片,但我希望此 setInterval 应该在悬停时停止/暂停并在悬停时重新启动。

我试过使用 clearinterval,但效果不佳。

$(document).ready(function(){

    $('.carousel').carousel(); // Start carousel

    /*  I WAS USING THIS BEFORE JUST FOR CHANGING SLIDES AUTOMATICALLY
    setInterval(function(){
        $('.carousel').carousel('next');
    },2500);
    });
    */

    // THIS IS WHAT IHAVE TRIED

    var myVar;

    function start(){
        var myVar = setInterval(next, 2500);
        function next() {
            $('.carousel').carousel('next');
        }
    }

    function stop() {
        clearInterval(myVar);
        myVar = 0;
    }

    $('.carousel').mouseenter(function(){stop();});
    $('.carousel').mouseleave(function(){start();});

    start();
});

代码没有给出任何错误。

替换此行:

var myVar = setInterval(next, 2500);

有了这个:

myVar = setInterval(next, 2500);

您已经定义了全局变量,并且在您的 start 函数中,您再次初始化该变量并将 setInterval 的 return 值分配给它。这意味着除了 start 函数之外的其余代码 myVar 保持未分配状态。所以 clearInterval 不起作用。

您只需将 return 值分配给全局变量 myVar 即可。