滚动速度变快

滚动表格,每次点击查询按钮之后,滚动速度都变快一些;怎么回事

image.png

FineReport xiaomili 发布于 2020-4-26 16:02 (编辑于 2020-4-26 16:03)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
xiaomiliLv6初级互助
发布于2021-6-20 17:19

换了个方案

最佳回答
0
KerydiaLv5中级互助
发布于2020-4-26 16:18

const widgetname = this.options.widgetName;

        //let widgetname = 'REPORT0';

        if (!window.scrollConf) window.scrollConf = {};

        if (!window.scrollConf[widgetname])

            window.scrollConf[widgetname] = {

                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[widgetname='" + widgetname + "']").find(".frozen-center").length == 1

                ) {

                    //没安装,报表块有没有设置冻结

                    part = $("div.fr-titlelayout[widgetname='" + widgetname + "']").find(".frozen-center"); //设置了冻结时

                    $("div.fr-titlelayout[widgetname='" + widgetname + "']").find(".frozen-north").css("overflow", "hidden");

                    $("div.fr-titlelayout[widgetname='" + widgetname + "']").find(".frozen-north").css("overflow-y", "hidden");

                } else {

                    part = $("div.fr-titlelayout[widgetname='" + widgetname + "']").find(".reportContent"); //没设置冻结时

                }

            } else {

                part = $("div.fr-titlelayout[widgetname='" + widgetname + "']").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[widgetname].mouseOverFlag = true;  });  //添加鼠标悬浮事件

            part.mouseleave(function() {window.scrollConf[widgetname].mouseOverFlag = false;}); //添加鼠标离开事件  

            window.scrollConf[widgetname].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[widgetname].mouseOverFlag) {

                currentpos = part[0].scrollTop;

                if (currentpos == window.scrollConf[widgetname].oldPos) {

                    pause = 1

                    part[0].scrollTop = 0;  //回到第一行

                    if (!$("div.fr-titlelayout[widgetname='" + widgetname + "'] .loading-local-indicator")[0]) window.scrollConf[widgetname].scrollCount += 1; //如果正在加载中, 滚动计数不会累加

                    if ((window.scrollConf[widgetname].scrollCount + 1) % window.scrollConf[widgetname].refreshCycle == 0) {return refreshReport(widgetname, part);}  //滚动计数是刷新数的倍数时, 触发刷新

                } else {

                    window.scrollConf[widgetname].oldPos = currentpos;

                    part[0].scrollTop = currentpos + 1;  //滚动1px

                }

            }

            return setTimeout(function() {scrollReport(widgetname, part);}, window.scrollConf[widgetname].scrollSpeed + pause *window.scrollConf[widgetname].pauseOnNextRun);  //触发下次滚动

        }

 

        //刷新报表块逻辑

        function refreshReport(widgetname, part) {

            _g().getWidgetByName(widgetname).gotoPage(1, "", true); //刷新报表块

            //$("div.fr-titlelayout[widgetname='" + widgetname + "'] .loading-local-indicator").eq(0).remove();//移除刷新加载图片

            //  .remove();//移除正在加载文字

            setTimeout(function() {

                window.scrollConf[widgetname].loadingFlag = setInterval(function() {

                    if ($("div.fr-titlelayout[widgetname='" +widgetname +"'] .loading-local-indicator")[0]) return;  //如果正在加载中, 则先不触发下次刷新

                    clearInterval(window.scrollConf[widgetname].loadingFlag);  //清除正在加载监控

                    window.scrollConf[widgetname].loadingFlag = 0;  //清除正在加载监控

                    initScrollReport(widgetname);  //重新初始化报表<mark>跑</mark><mark>马</mark><mark>灯</mark>逻辑

                }, window.scrollConf[widgetname].scrollSpeed);  //监控报表是否正在刷新加载

            });

        }

        setTimeout(function() {initScrollReport(widgetname)});  //触发首次初始化滚动


最佳回答
0
yzm259771Lv1见习互助
发布于2021-6-20 17:48

+1

  • 2关注人数
  • 762浏览人数
  • 最后回答于:2021-6-20 17:48
    请选择关闭问题的原因
    确定 取消
    返回顶部