setTimeout第二次执行时失效

我创建了一个决策报表,决策报表中有一个报表块。我对这个报表块添加了两个初始化事件,第一个事件的JS代码如下:

//实现等待5秒,然后自动滚动报表块 window.flag = true; setTimeout(function() { //鼠标离开,继续滚动  var old = -1; var interval = setInterval(function() { if (window.flag) { $("#frozen-center").mouseover(function() { window.flag = false; }) //鼠标悬停,滚动停止  $("#frozen-center").mouseleave(function() { window.flag = true; }) currentpos = $("#frozen-center")[0].scrollTop; if (currentpos == old) { $("#frozen-center")[0].scrollTop = 0; } else { old = currentpos; $("#frozen-center")[0].scrollTop = currentpos + 1.5; } } }, 60); //以25ms的速度每次滚动3.5PX  }, 5000)

第二个事件的代码如下:

// 实现20秒后从头开始滚动报表块 var form = this.options.form; setInterval(function() {       form.getWidgetByName('report0').gotoPage(1,"{}",true); }, 20000); FR.HtmlLoader.loadingEffect=function(){}

现在的问题是打开这个决策报表后,第一次报表块等待5秒后滚动,第二次报表块没有等待5秒就直接滚动了。为什么会这样?该怎么解决呢?

JavaScript 大秦赋 发布于 2023-6-7 15:56
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
YmengLv5中级互助
发布于2023-6-7 16:19(编辑于 2023-6-7 17:08)

你的代码事件一里的setTimeout只会执行一次,还有你事件二里的刷新也是只会执行一次,因为刷新一次后form对象已经变了,form.getWidgetByName('report0').gotoPage(1,"{}",true);也就没作用了

FR.HtmlLoader.loadingEffect=function(){}

window.flag = true; 

var i=0;

setTimeout(function() { //鼠标离开,继续滚动  

$("[widgetname=REPORT0]").on("mouseover","#frozen-center",function() { 

window.flag = false; }) //鼠标悬停,滚动停止  

$("[widgetname=REPORT0]").on("mouseleave","#frozen-center",function() { 

window.flag = true; })

var old = -1;

var interval = setInterval(function() { 

if (window.flag) {  

currentpos = $("[widgetname=REPORT0]").find("#frozen-center")[0].scrollTop; 

if (currentpos == old) {

$("[widgetname=REPORT0]").find("#frozen-center")[0].scrollTop = 0;

i++;

old=0;

if(i==83){

i=0;

old=-1;

}

} else { 

old = currentpos; 

$("[widgetname=REPORT0]").find("#frozen-center")[0].scrollTop = currentpos + 1.5; 

}, 60); //以25ms的速度每次滚动3.5PX  

}, 5000)

  • 大秦赋 大秦赋(提问者) 怎么调整可以实现需要的功能呢
    2023-06-07 16:23 
  • Ymeng Ymeng 回复 大秦赋(提问者) 你的需求有点怪,事件一滚动到结尾就会从头开始,为什么还需要用事件二去让他从头开始滚动?
    2023-06-07 16:26 
  • 大秦赋 大秦赋(提问者) 回复 Ymeng 嗯,实际需求是这样的:等待5秒,滚动报表块,报表块到开头,再次等待5秒,再次滚动报表块....
    2023-06-07 16:44 
  • Ymeng Ymeng 回复 大秦赋(提问者) 嗯,看我修改回答,代码放上面了,写一个事件就够了
    2023-06-07 17:07 
  • Ymeng Ymeng 回复 大秦赋(提问者) 不知道你报表块是否有参数联动,有联动的话报表块加载完不会停留5s,等下次滚动到开头就会停留5s了
    2023-06-07 17:14 
最佳回答
0
shirokoLv6资深互助
发布于2023-6-7 15:59
setTimeout是异步执行,不是等待5秒,所以第一次5秒,第二次应该等待10秒
  • 3关注人数
  • 622浏览人数
  • 最后回答于:2023-6-7 17:08
    请选择关闭问题的原因
    确定 取消
    返回顶部