回答:const widgetname = this.options.widgetName; //let widgetname = 'REPORT0'; if (!window.scrollConf) window.scrollConf = {}; if (!window.scrollConf) window.scrollConf = { scrollSpeed: 15, //滚动速度, 每多少毫秒滚动1px, 可修改 refreshCycle: 3, //滚动几圈后进行刷新, 可修改 pauseOnNextRun: 3000, //下次滚动前的等待时间, 可修改 scrollCount: 1, //滚动圈数统计, 勿修改 mouseOverFlag: false, //鼠标悬浮标记, 勿修改 oldPos: -1, //<mark>跑</mark><mark>马</mark><mark>灯</mark>滚动初始位置, 勿修改 loadingFlag: 0, //刷新时正在加载的标记, 勿修改 }; //获取报表块滚动对象并隐藏滚动条 function getReportContentAndHideScrollBar(widgetname) { let part; if ($(".scrollDiv").length == 0) { //判断是否安装了自定义滚动条插件 if ( $("div.fr-titlelayout").find(".frozen-center").length == 1 ) { //没安装,报表块有没有设置冻结 part = $("div.fr-titlelayout").find(".frozen-center"); //设置了冻结时 $("div.fr-titlelayout").find(".frozen-north").css("overflow", "hidden"); $("div.fr-titlelayout").find(".frozen-north").css("overflow-y", "hidden"); } else { part = $("div.fr-titlelayout").find(".reportContent"); //没设置冻结时 } } else { part = $("div.fr-titlelayout").find(".scrollDiv"); //如果安装了插件,所有元素都是.scrollDiv } part.css("overflow", "hidden"); //去除滚动条 part.css("overflow-x", "hidden"); part.css("overflow-y", "hidden"); //兼容IE的去除滚动条 return part; } //<mark>跑</mark><mark>马</mark><mark>灯</mark>滚动前预处理 function initScrollReport(widgetname) { // console.log('start') let part = getReportContentAndHideScrollBar(widgetname); //获取报表块 part.mouseover(function() { window.scrollConf.mouseOverFlag = true; }); //添加鼠标悬浮事件 part.mouseleave(function() {window.scrollConf.mouseOverFlag = false;}); //添加鼠标离开事件 window.scrollConf.oldPos = -1; //将上次滚动位置预置为-1, 触发初次滚动 setTimeout(function() { scrollReport(widgetname, part); }); //触发滚动 } //<mark>跑</mark><mark>马</mark><mark>灯</mark>滚动逻辑 function scrollReport(widgetname, part) {// console.log(window.scrollConf.REPORT0); let pause = 0; if (!window.scrollConf.mouseOverFlag) { currentpos = part.scrollTop; if (currentpos == window.scrollConf.oldPos) { pause = 1 part.scrollTop = 0; //回到第一行 if (!$("div.fr-titlelayout .loading-local-indicator")) window.scrollConf.scrollCount += 1; //如果正在加载中, 滚动计数不会累加 if ((window.scrollConf.scrollCount + 1) % window.scrollConf.refreshCycle == 0) {return refreshReport(widgetname, part);} //滚动计数是刷新数的倍数时, 触发刷新 } else { window.scrollConf.oldPos = currentpos; part.scrollTop = currentpos + 1; //滚动1px } } return setTimeout(function() {scrollReport(widgetname, part);}, window.scrollConf.scrollSpeed + pause *window.scrollConf.pauseOnNextRun); //触发下次滚动 } //刷新报表块逻辑 function refreshReport(widgetname, part) { _g().getWidgetByName(widgetname).gotoPage(1, "", true); //刷新报表块 //$("div.fr-titlelayout .loading-local-indicator").eq(0).remove();//移除刷新加载图片 // .remove();//移除正在加载文字 setTimeout(function() { window.scrollConf.loadingFlag = setInterval(function() { if ($("div.fr-titlelayout .loading-local-indicator")) return; //如果正在加载中, 则先不触发下次刷新 clearInterval(window.scrollConf.loadingFlag); //清除正在加载监控 window.scrollConf.loadingFlag = 0; //清除正在加载监控 initScrollReport(widgetname); //重新初始化报表<mark>跑</mark><mark>马</mark><mark>灯</mark>逻辑 }, window.scrollConf.scrollSpeed); //监控报表是否正在刷新加载 }); } setTimeout(function() {initScrollReport(widgetname)}); //触发首次初始化滚动