当前位置: 首页 > 知识库问答 >
问题:

设置和清除间隔变为多个间隔

於乐
2023-03-14

我正在尝试开发一个滑块,如果用户没有点击后退或前进按钮,它每5秒就会改变一次。

但是如果他(用户)这样做了,间隔会触发多次。。。为什么?

我将间隔保存在一个变量中,并清除该变量,因此我不知道为什么这不起作用。。。但是看看你自己:

        jQuery.fn.extend({
wrGallery: function() {
    return this.each(function() {

        //  config
        var wrClassActive = 'galerie_active';
        var wrTime = 5000;
        //  wrAutomaticDirection gibt an, in welche Richtung 
        //  die Gallerie bei automatischem Wechsel wechseln soll (True = vorwärts/rechts)
        var wrAutomaticDirection = true;

        var wr = jQuery(this);
        var wrGalleryContents = wr.find('.galerie_content');
        var wrGalleryContentsFirst = wr.find('.galerie_content:first-child');
        var wrBtnBack = wr.find('#galerie_backward');
        var wrBtnFor = wr.find('#galerie_forward');
        var wrTimer = 0;
        var wrI = 0;
        var wrOldActiveID = 0;

        var wrInit = function() {
            wrGalleryContents.each(function() {
                wrI++;
                jQuery(this).attr('id', wrI);
                jQuery(this).css({
                    display: 'none',
                    opacity: 0
                })
            })

            wrGalleryContentsFirst.css({
                display: 'block',
                opacity: 1
            })
            wrGalleryContentsFirst.addClass('galerie_active')
            wrStartTimer();
        }

        var wrStartTimer = function() {
            wrTimer = setInterval(function() {
                wrChange(wrAutomaticDirection);
            }, wrTime)
        }

        var wrStoppTimer = function() {
            clearInterval(wrTimer);
            wrTimer = 0;
        }

        var wrBackground = function(wrDirection) {
            wrOldActiveID = wr.find('.' + wrClassActive).attr('id');
            wr.find('.' + wrClassActive).removeClass(wrClassActive);

            if (wrDirection) {
                wrOldActiveID++;
                if (wrOldActiveID <= wrI) {
                    wr.find('#' + wrOldActiveID).addClass(wrClassActive);
                } else {
                    wr.find('#1').addClass(wrClassActive);
                }
            } else {
                wrOldActiveID--;
                if (wrOldActiveID <= wrI) {
                    wr.find('#' + wrOldActiveID).addClass(wrClassActive);
                } else {
                    wr.find('#3').addClass(wrClassActive);
                }
            }
        }

        var wrAnimate = function(wrDirection) {
            wrGalleryContents.stop().animate({
                opacity: 0
            }, 500);
            wr.find('.' + wrClassActive).css({
                display: 'block'
            })
            wr.find('.' + wrClassActive).stop().animate({
                opacity: 1
            }, 500);

        }

        var wrChange = function(wrDirection) {
            wrBackground(wrDirection);
            wrAnimate(wrDirection);

        }

        wr.on('mouseenter', function() {
            wrStoppTimer();
        });

        wr.on('mouseleave', function() {
            wrStartTimer();
        });

        wrBtnBack.on('click', function() {
            wrStoppTimer();
            wrStartTimer();
            wrChange(false);
        });

        wrBtnFor.on('click', function() {
            wrStoppTimer();
            wrStartTimer();
            wrChange(true);
        });


        wrInit();

    });
}

});

感谢阅读;-)

共有1个答案

云飞翮
2023-03-14

wrStartTimer的开头添加一个wrStoppTimer()调用:

    var wrStartTimer = function() {
        wrStoppTimer();
        wrTimer = setInterval(function() {
            wrChange(wrAutomaticDirection);
        }, wrTime)
    };

在两个单击函数中,您还可以使用:

        wrStoppTimer();
        wrStartTimer();

您可以删除该wrStoppTimer()调用,因为wrStartTimer()现在将为您调用它。

还有一件事:如果您像使用var name=函数(){...}一样定义函数,您应该在结尾的}后面放一个分号,就像上面更新的代码一样。

 类似资料:
  • 我在for循环中有一个set interval函数,当它在set interval函数中时,如果它满足条件,就会发出警报并清除间隔。下面是我的代码,但它不工作。谁能告诉我这里的错误是什么。 谢谢 我试图解决的是:当本地时间与定时器数组中的时间匹配时,我需要每次获得警报(第0列;定时器[计数][0])。数组已经排序

  • 我只想在进行ajax调用时清除上一个间隔并设置一个新的间隔。 当前代码为: 我尝试了许多推荐的变化,以便能够从函数外部清除间隔。如; 将"间隔"变量设置为null或false, 窗设定间隔, 在setInterval中写入计数函数, 将count函数作为ajax函数之外的单独函数编写, 但这两种变化都没有消除间隔。 稍后,我还需要清除键入的间隔。

  • 我有一个名为Interval的setInterval,它运行一个倒计时计时器。我有一个开始按钮,第一次点击时播放,第二次暂停就好了。当我双击时,它会将计时器显示回零,但似乎并没有清除实际的计时器。将只播放在显示被0替换之前停止的地方。

  • get_user_record()此函数调用在数据库中提取数据的方法。我使用超时是因为我不想从这个方法得到响应,showUpdatedProgressBar()方法不断地检查数据库计数,并相应地给进度条赋值。为此,我使用了setInterval()函数,该函数正在工作,但无法清除间隔。请告诉我哪里出错了。

  • 问题内容: 我正在学习node.js,只是设置了一个空的Linux虚拟机并安装了节点。 我每分钟都在不断运行功能 并考虑根据当前时间添加其他功能。-(例如,如果dateTime =中午星期日,则运行功能) 我的问题是,与传统的cron作业设置相比,运行这样的设置是否有任何缺点? 请记住,无论如何,我必须每分钟在节点中运行一次此功能。 问题答案: 这取决于您必须严格遵守该分钟间隔,以及节点脚本在此期

  • 我有一个在try块中调用setInterval的代码,我清除了代码末尾的间隔,但是如果我的代码捕获和异常,setInterval函数将永远运行。如果我在try块中创建的sqsInterval在捕获中不存在,我如何清除此?