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

JavaScript/Jquery clearInterval

庄高谊
2023-03-14

我在一个页面上有多个滑块,除了不能正常设置和清除间隔外,其他一切都正常工作。我试图在调用next和prev函数时重置setInterval。在我单击next或prev之后,clearInterval工作,滑块都停止了,但是当新的setInterval运行时,奇怪的事情发生了。

理想情况下,我想为页面上的每个滑块这样做,但我甚至不能全局地让它工作(这意味着一次重置页面上的所有滑块)。

谢谢你的反馈!

编辑:包括JSFiddle

编辑:我在实际代码下面粘贴了一个JS布局示例

gemco.customSlider = gemco.customSlider || {};

gemco.customSlider = {

nextSlide: function(el, timer){     
    // Set Active Slide
    var parentSlide = el.parent('section');
    var totalSlides = parentSlide.find($('.cs-slide')).length;
    var activeSlide = parentSlide.find($('.cs-slide.active')); 
    var curSlide = activeSlide.data('tab');
    var nextSlideIndex = curSlide + 1;
    if(nextSlideIndex > totalSlides){
        nextSlideIndex = 1;
    }
    var nextSlide = parentSlide.find($('.cs-slide[data-tab="' + nextSlideIndex + '"]'));

    activeSlide.removeClass('active');
    nextSlide.addClass('active');

    // Reset Timer
    gemco.customSlider.resetTimer(timer);
},

prevSlide: function(el, timer){     
    // <Similar to nextSlide>
},

playSlider: function(){
    $('.custom-slider').each(function(){
        var el = $(this).find('.cs-slide.active');
        var parentSlide = el.parents('.custom-slider');
        var totalSlides = parentSlide.find($('.cs-slide')).length;
        var activeSlide = parentSlide.find($('.cs-slide.active')); 
        var curSlide = activeSlide.data('tab');
        var nextSlideIndex = curSlide + 1;
        if(nextSlideIndex > totalSlides){
            nextSlideIndex = 1;
        }
        var nextSlide = parentSlide.find($('.cs-slide[data-tab="' + nextSlideIndex + '"]'));

        activeSlide.removeClass('active');
        nextSlide.addClass('active');

        // Set Active Tab Link
        gemco.customSlider.setActiveTabLink();
    }); 

},

resetTimer: function(timer){
    clearInterval(timer);
    var timer = setInterval(function(){
        gemco.customSlider.playSlider();
    }, 7000);   
},

init: function(){

    var timer = setInterval(function(){
        gemco.customSlider.playSlider();
    }, 7000);   

    $('.cs-next-prev.next').click(function(e){
        timer = timer;
        el = $(this); 
        e.preventDefault();
        gemco.customSlider.nextSlide(el, timer);
    });

    $('.cs-next-prev.prev').click(function(e){
        // <Similar to Above>
    });
}

} // gemco.customSlider 

下面是JS整体布局的示例

var obj = obj || {};

obj.customSlider = obj.customSlider || {};
obj.customSlider = {
    nextSlide: function(){      
        // ...
    },

    prevSlide: function(){      
        // ...
    },

    playSlider: function(){
        // ...      
    },

    resetTimer: function(){
        // ...  
    },

    init: function(){
        // Init Functions
    }   
},

obj.sample = obj.sample || {};
obj.sample = {
    init: function() {
        // ...
    }
} 

$(document).ready(function(){
    obj.customSlider.init();
    obj.sample.init();
});

问题示例-JSFiddle-单击下一个箭头几次,就好像每次都在创建新的计时器???如果我在resetTImer中注释掉新的间隔,然后点击next按钮,我可以看到clearInterval工作。困惑的

共有1个答案

章岳
2023-03-14

在开始时制作一个全局计时器

gemco.customSlider = (function(){
   var timer;// all functions use this timer only, no more others
   var resetTimer=function(){...};
   var setActiveTabLink=function(){...};
   ....
   return {
    Init: C,//map functions..
    Next: B,
    setActiveTabLink: setActiveTabLink
    ....
   }
})();

并删除resetTimerinit中的var

我不明白开头的代码:

gemco.customSlider = gemco.customSlider || {};

gemco.customSlider = {//the first row make sure customSlider is not empty, but here overwrites the first row....

更多说明:原因是您的计时器未清除,并且它一直在后台工作。

此代码适用于:https://jsfiddle.net/z1kg8qdt/29/

变化:

  1. 使用全局计时器将模块设计模式应用到您的代码
  2. 删除所有功能中的参数定时器
  3. 已删除此行:gemco。customSlider=gemco。自定义滑块| |{}

JavaScript模块是最常用的设计模式,用于保持特定代码段独立于其他组件。这提供了松散耦合以支持结构良好的代码。

 类似资料:
  • script是一小段程序,可以为您的网站添加交互性。 例如,脚本可以生成弹出警报框消息,或提供下拉菜单。 可以使用JavaScript或VBScript编写此脚本。 您可以使用任何脚本语言编写各种小函数,称为事件处理程序,然后您可以使用HTML属性触发这些函数。 现在,大多数Web开发人员只JavaScript和相关框架,甚至各种主流浏览器都不支持VBScript。 您可以将JavaScript代

  • 在本章中,我们将研究JavaScript 。 在Foundation中设置JavaScript很容易; 你唯一需要的就是jQuery。 JavaScript安装 您可以使用ZIP下载,包管理器或CDN来获取Foundation JavaScript文件。 在您的代码中,您可以提供指向jQuery和Foundation的链接作为标记,放在结束之前,并检查在jQuery之后加载Foundation。

  • 使用Java 8,Nashorn,引入了一个大大改进的javascript引擎,以取代现有的Rhino。 Nashorn提供2到10倍的性能,因为它直接编译内存中的代码并将字节码传递给JVM。 Nashorn使用Java 7中引入的调用动态特性来提高性能。 jjs 对于Nashorn引擎,JAVA 8引入了一个新的命令行工具jjs,用于在控制台执行javascript代码。 解释js文件 在c:\

  • js 代码如下 报错日志: ReferenceError: escodegen is not defined

  • 在本章中,我们将重点介绍在PyCharm编辑器中使用JavaScript的主要功能。 当用户通过URL实现JavaScript库时,PyCharm打算下载本地副本,以便可以用于完成和代码分析。 考虑我们的HTML文件的示例代码,如下所示,我们在上一章中创建了该代码 - 对于每个HTML文件或JavaScript文件,您可以检查通过PyCharm Editor的Settings配置加载的外部库。 观

  • 描述 (Description) 也可以使用相关的 app 方法使用 JavaScript 打开和关闭 popover,如下所示 - myApp.popover(popover, target) - 用于打开目标元素周围的myApp.popover(popover, target) ,它接受以下参数 - popover - 这是一个required参数,它是一个要打开的popover的HTMLEl

  • 描述 (Description) 您可以使用JavaScript App方法启用和禁用sortable,如下所示 - myApp.sortableOpen(sortableContainer) - 用于在指定的可排序容器上启用排序模式。 myApp.sortableClose(sortableContainer) - 用于在指定的可排序容器上禁用排序模式。 myApp.sortableToggle

  • 描述 (Description) 您可以使用JavaScript代码打开和关闭选取器模式。 您可以使用pickerModal(picker)方法打开closeModal(picker)模式和closeModal(picker)方法来关闭closeModal(picker)模式。 例子 (Example) 以下示例使用Framework7中的JavaScript显示打开和关闭选择器模式 - <!DO