解决JS中MSClass与setInterval并发导致滚动加速的问题
本文详解在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程序设计有所帮助。
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
