解决JS中MSClass与setInterval并发导致滚动加速的问题

作者:纸飞机时间:2026-10-30 05:32:33浏览:592

本文详解在JavaScript中使用MSClass与setInterval实现Ajax定时滚动时,因双重定时器叠加导致滚动速度异常加快的原因。通过示例代码展示如何在每次Ajax请求前调用Destroy方法销毁旧实例,从而避免多个setInterval并发执行,确保滚动效果稳定。

MSClass与setInterval滚动加速问题解析

本文介绍一种基于JavaScript、MSClass组件和setInterval定时器实现Ajax定时采集信息并滚动显示的技术方案,供开发者参考。

setTimeout函数用于设置延时器,该定时器仅执行一次后自动停止。

setInterval函数用于设置重复执行的定时器,会按照指定间隔多次执行。

在项目中引用jquery.timers-1.2.js定时器库,并结合MSClass组件实现信息的定期滚动展示。设定每3分钟执行一次,预期执行约三次。然而实际运行中发现,随着执行次数增加,滚动速度越来越快。这主要是因为jquery.timers和MSClass内部都使用了setInterval,导致定时器叠加。

由于两个库都调用了setInterval,最终导致多个setInterval并发执行,从而引发滚动速度异常加快。解决方法是在每次调用滚动逻辑前,先通过clearInterval清除上一次的setInterval实例,或者直接引用MSClass作者提供的标准方法以规范处理。


//定时器先执行 销毁实例
var Marquee1 = new Marquee(["div1", "Content"])
function Marquee_everyTime() {
  Marquee1.Destroy(); //销毁实例应用
  GetMarqueeInfo();  //然后ajax采集需要的信息数据。
}
//ajax方法
function GetMarqueeInfo() {
  LG.ajax({
    type: 'AjaxOther',
    method: 'GetMarqueeInfo',
    success: function (data, tipsContent) {
      $("#Content").html("");
      $("#Content").html(tipsContent);
      //大容器| 小容器 |滚动的方向 |滚动的速度 | 大容器的宽度 | 大容器的高度 | 滚动休息时间 | 滚动休息时间 | 滚动结束时间
     Marquee1.Direction = 2;
     Marquee1.Step = 0.4;
     Marquee1.Width = 640;
     Marquee1.Height = 30;
     Marquee1.Timer = 20;
     Marquee1.DelayTime = 4000;
     Marquee1.WaitTime = 3000;
     Marquee1.ScrollStep = 320;
     Marquee1.Start();
    },
    error: function () {
      LG.tip('信息加载失败.');
    }
  });
}

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中ajax操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

作者最新文章