如何实现对决策报表中的表格图表进行向上循环滚动

决策报表中用到表格图表,如何对表格图表进行循环滚动

FineReport 流风似水 发布于 2019-5-6 11:22
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
尘埃。Lv2初级互助
发布于2019-5-6 11:25(编辑于 2019-5-6 14:35)

报表块实现跑马灯效果

目录:

1. 描述


在设计大屏报表块的时候,有时我们希望实现文字跑马灯效果。现有的文档当中:

1)以html实现跑马灯特效

2)JS实现跑马灯效果

都是以HTML+js的方式实现了单行文本的跑马灯效果,那么如何实现整体报表块的跑马灯效果呢,如下:
2. 思路


报表布局设置加上js控制实现。

注:示例是在报表块初始化后通过js实现了隐藏滚动条和跑马灯的效果,如果报表块加载比较慢没有实现效果,可以适当调整延时函数setTimeout的延时时间。


3. 操作步骤



3.1 示例一:标题未冻结的跑马灯效果


1)新建一个决策报表,将body的布局方式设置为绝对布局(自适应布局无效)

SELECT * FROM 销量。

3)在决策报表主体拖入一个报表块,报表块设计如下:

初始化后事件:

  1. if(window.interval2) {  

  2.     clearInterval(window.interval2);  

  3. }  

  4.   

  5. setTimeout(function() {  

  6.     $("div[widgetname=REPORT0]").find(".reportContent")[0].style.overflow = "hidden";  

  7. }, 1000);  

  8.   

  9. window.flag = true;  

  10. setTimeout(function() {  

  11.     $(".reportContent").mouseover(function() {  

  12.         window.flag = false;  

  13.     })  

  14.     $(".reportContent").mouseleave(function() {  

  15.         window.flag = true;  

  16.     })  

  17.     var old = -1;  

  18.     window.interval2 = setInterval(function() {  

  19.         if(window.flag) {  

  20.             currentpos = $(".reportContent")[0].scrollTop;  

  21.             if(currentpos == old) {  

  22.                 $(".reportContent")[0].scrollTop = 0;  

  23.             } else {  

  24.                 old = currentpos;  

  25.                 $(".reportContent")[0].scrollTop = currentpos + 1.5;  

  26.             }  

  27.         }  

  28.     }, 25);  

  29. }, 1000)  


4)保存预览,效果如下:

$(".reportContent")[0]统一修改为$("div[widgetname=REPORT0]").find(".reportContent")[0],把代码中所有的REPORT0修改为报表块对应的控件名称大写格式:

  1. setTimeout(function() {  

  2.     $("div[widgetname=REPORT0_C]").find(".reportContent")[0].style.overflow = "hidden";  

  3. }, 1000);  

  4.   

  5. window.flag = true;  

  6. setTimeout(function() {  

  7.     $(".reportContent").mouseover(function() {  

  8.         window.flag = false;  

  9.     })  

  10.     $(".reportContent").mouseleave(function() {  

  11.         window.flag = true;  

  12.     })  

  13.     var old = -1;  

  14.     window.interval2 = setInterval(function() {  

  15.         if(window.flag) {  

  16.             currentpos = $("div[widgetname=REPORT0_C]").find(".reportContent")[0].scrollTop;  

  17.             if(currentpos == old) {  

  18.                 $("div[widgetname=REPORT0_C]").find(".reportContent")[0].scrollTop = 0;  

  19.             } else {  

  20.                 old = currentpos;  

  21.                 $("div[widgetname=REPORT0_C]").find(".reportContent")[0].scrollTop = currentpos + 1.5;  

  22.             }  

  23.         }  

  24.     }, 25);  

  25. }, 1000)  


保存预览,效果如下:

自定义滚动条插件(1.2版本),需要将js代码中的.reportContent替换成.scrollDiv

  1. setTimeout(function() {  

  2.     $("div[widgetname=REPORT0]").find(".scrollDiv")[0].style.overflow = "hidden";  

  3. }, 1000);  

  4.   

  5. window.flag = true;  

  6. setTimeout(function() {  

  7.     $(".scrollDiv").mouseover(function() {  

  8.         window.flag = false;  

  9.     })  

  10.     $(".scrollDiv").mouseleave(function() {  

  11.         window.flag = true;  

  12.     })  

  13.     var old = -1;  

  14.     window.interval2 = setInterval(function() {  

  15.         if(window.flag) {  

  16.             currentpos = $(".scrollDiv")[0].scrollTop;  

  17.             if(currentpos == old) {  

  18.                 $(".scrollDiv")[0].scrollTop = 0;  

  19.             } else {  

  20.                 old = currentpos;  

  21.                 $(".scrollDiv")[0].scrollTop = currentpos + 1.5;  

  22.             }  

  23.         }  

  24.     }, 25);  

  25. }, 1000)  



3.2 示例二:标题冻结的跑马灯效果


在示例一的基础上修改报表。

1)编辑报表块,选中第一行,将鼠标放在行表头上,点击右键,点击设置重复标题行

冻结,打开重复与冻结设置窗口,勾选冻结第1行至第1行

初始化后事件的js代码修改为下面的代码:

  1. setTimeout(function() {  

  2.     //隐藏报表块report0的滚动条(此报表块名为report0,根据具体情况修改)  

  3.     $("div[widgetname=REPORT0]").find(".frozen-north")[0].style.overflow = "hidden";  

  4.     $("div[widgetname=REPORT0]").find(".frozen-center")[0].style.overflow = "hidden";  

  5. }, 1000);  

  6.   

  7. window.flag = true;  

  8. //鼠标悬停,滚动停止    

  9. setTimeout(function() {  

  10.     $(".frozen-center").mouseover(function() {  

  11.         window.flag = false;  

  12.     });  

  13.   

  14.     //鼠标离开,继续滚动    

  15.     $(".frozen-center").mouseleave(function() {  

  16.         window.flag = true;  

  17.     });  

  18.   

  19.     var old = -1;  

  20.     var interval = setInterval(function() {  

  21.         if(window.flag) {  

  22.             currentpos = $(".frozen-center")[0].scrollTop;  

  23.             if(currentpos == old) {  

  24.                 $(".frozen-center")[0].scrollTop = 0;  

  25.             } else {  

  26.                 old = currentpos;  

  27.                 //以25ms的速度每次滚动1.5PX    

  28.                 $(".frozen-center")[0].scrollTop = currentpos + 1.5;  

  29.             }  

  30.         }  

  31.     }, 25);  

  32. }, 1000);  


直接替换即可。如下图所示:

setInterval()函数中的$(".frozen-center")[0]统一修改为$("div[widgetname=REPORT0]").find(".frozen-center")[0],把代码中所有的REPORT0修改为报表块对应的控件名称大写格式:

  1. setTimeout(function() {  

  2.     //隐藏报表块report0_c的滚动条(此报表块名为report0_c,根据具体情况修改)  

  3.     $("div[widgetname=REPORT0_C]").find(".frozen-north")[0].style.overflow = "hidden";  

  4.     $("div[widgetname=REPORT0_C]").find(".frozen-center")[0].style.overflow = "hidden";  

  5. }, 1000);  

  6.   

  7. window.flag = true;  

  8. //鼠标悬停,滚动停止    

  9. setTimeout(function() {  

  10.     $(".frozen-center").mouseover(function() {  

  11.         window.flag = false;  

  12.     });  

  13.   

  14.     //鼠标离开,继续滚动    

  15.     $(".frozen-center").mouseleave(function() {  

  16.         window.flag = true;  

  17.     });  

  18.   

  19.     var old = -1;  

  20.     var interval = setInterval(function() {  

  21.         if(window.flag) {  

  22.             currentpos = $("div[widgetname=REPORT0_C]").find(".frozen-center")[0].scrollTop;  

  23.             if(currentpos == old) {  

  24.                 $("div[widgetname=REPORT0_C]").find(".frozen-center")[0].scrollTop = 0;  

  25.             } else {  

  26.                 old = currentpos;  

  27.                 //以25ms的速度每次滚动1.5PX    

  28.                 $("div[widgetname=REPORT0_C]").find(".frozen-center")[0].scrollTop = currentpos + 1.5;  

  29.             }  

  30.         }  

  31.     }, 25);  

  32. }, 1000);  


保存预览,效果如下:

4. 预览效果

4.1 PC端预览效果

1)示例一:标题未冻结的跑马灯效果


4.2 移动端预览效果

注:不支持移动端。


5. 已完成模板


5.1 示例一


1)标题未冻结

模板效果在线查看请点击:报表块实现跑马灯效果-示例一1.frm

已完成的模板,可参见:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\JS\填报预览JS实例\03-报表块实现跑马灯效果-示例一1.frm

右击存储模板

2)标题未冻结,多个报表块

模板效果在线查看请点击:报表块实现跑马灯效果-示例一2.frm

已完成的模板,可参见:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\JS\填报预览JS实例\03-报表块实现跑马灯效果-示例一2.frm

右击存储模板

3)标题未冻结,安装了“自定义滚动条插件(1.2版本)

模板效果在线查看请点击:报表块实现跑马灯效果-示例一3.frm (注:在线服务器未安装插件,所以没效果

已完成的模板,可参见:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\JS\填报预览JS实例\03-报表块实现跑马灯效果-示例一3.frm

右击存储模板

5.2 示例二

1)标题冻结

模板效果在线查看请点击:报表块实现跑马灯效果-示例二1.frm

已完成的模板,可参见:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\JS\填报预览JS实例\03-报表块实现跑马灯效果-示例二1.frm

右击存储模板

2)标题冻结,多个报表块

模板效果在线查看请点击:报表块实现跑马灯效果-示例二2.frm

已完成的模板,可参见:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\JS\填报预览JS实例\03-报表块实现跑马灯效果-示例二2.frm

右击存储模板





如果解决了您的问题,请及时采纳,系统会为您增加20信用分哦...


最佳回答
0
梦已元Lv4中级互助
发布于2019-5-6 11:28

选择报表块 添加事件:根据需要修改代码时间

setTimeout(function(){  

    $("div[widgetname=REPORT0]").find("#frozen-north")[0].style.overflow="hidden";  

    $("div[widgetname=REPORT0]").find("#frozen-center")[0].style.overflow="hidden";  

    },500);  

    //隐藏报表块report0的滚动条  

window.flag=true;  

setTimeout(function(){     

$("#frozen-center").mouseover(function()    

{    

  window.flag=false;    

  })  

  //鼠标悬停,滚动停止  

$("#frozen-center").mouseleave(function()    

{    

  window.flag=true;    

  })    

  //鼠标离开,继续滚动  

var old=-1;     

var interval=setInterval(function()    

{  

if(window.flag){  

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

   if (currentpos==old){  

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

     }    

   else {    

      old=currentpos;    

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

        }    

      }  

    },100);  

    //以25ms的速度每次滚动3.5PX  

},1000) 


  • 3关注人数
  • 1682浏览人数
  • 最后回答于:2019-5-6 14:35
    请选择关闭问题的原因
    确定 取消
    返回顶部