首页 > 其他分享 >固定表头和首列,防抖节流

固定表头和首列,防抖节流

时间:2024-07-09 14:35:02浏览次数:13  
标签:function 防抖 right 节流 top 表头 var position left

<style>
    #SetLimitAdd td{
        line-height: 20px;
        padding-top: 5px;
        padding-bottom: 5px;
    }
    #wrapper{}
    .container-fluid{
        width:1747px;/*实际显示区域*/
        overflow-x: auto;
        padding-right: auto;
        padding-left: auto;
        margin-right: auto;
        margin-left: auto;
    }
    #right_div{float: left;}
    #right_div1{width: 100%;overflow: hidden;}
    #right_divx{width: 2200px;}/*表格真实宽度*/
    #right_div2{
        /*margin-top:-20px;*/
        width:100%;
        height:500px;
        overflow-y: auto;
        overflow-x: hidden;/*内部不显示滚动条*/
    }
    #right_table1{width: 2200px;background-color: #ededed;border-bottom:1px solid #cccccc;}
    #right_table1 td{padding-top: 5px;padding-bottom: 5px;}
    #SetLimitAdd{
        /**width和max-width一起写,手机浏览器打开也能固定长度**/
        width: 2200px;/*表格真实宽度*/
        max-width: 2200px;/*表格真实宽度*/
        /*white-space:nowrap;*/
    }
</style>
<div class="basic_table" style="width: 98%; margin: 0 auto;">
    <div class="container-fluid" id="wrapper">
        <div id="right_div">
            <div id="right_div1">
                <div id="right_divx">
                    <table id="right_table1" class="basic_table_tit">
                        <tbody>
                        <tr>
                            <td style="width:50px;"><input type="checkbox" id="SetPriceInstallCheckAll" style="width:16px;height:16px;" onclick="CheckBoxGroup(this, 'SetPriceInstallCheckOne')" /></td>
                            <td style="width:150px;">配件编码</td>
                            <td style="width:150px;">配件名称</td>
                            <td style="width:150px;">原厂编码</td>
                            <td style="width:110px;">规格</td>
                            <td style="width:70px;">单位</td>
                            <td style="width:110px;">批次</td>
                            <td style="width:110px;">销售价格</td>
                            <td style="width:110px;">A价格</td>
                            <td style="width:110px;">B价格</td>
                            <td style="width:110px;">C价格</td>
                            <td style="width:110px;">成本价</td>
                            <td style="width:110px;">采购订单价</td>
                            <td style="width:110px;">原限价</td>
                            <td style="width:110px;">新限价</td>
                            <td style="width:110px;">加价率</td>
                            <td style="width:110px;">仓库</td>
                            <td style="width:110px;">子库</td>
                            <td style="width:80px;">冻结状态</td>
                            <td style="width:auto;border-right:none;">销售频次</td>
                        </tr>
                        </tbody>
                    </table>
                </div>
            </div>
            <div id="right_div2">
                <table class="wgw_downtab basic_table_con basic_table_bottom" id="SetLimitAdd">
                    <tbody class="basic_table_con basic_table_bottom" id="SetLimitAddList"></tbody>
                </table>
            </div>
        </div>
    </div>
</div>

 

$(function () {//固定和滚动
    var right_div2 = document.getElementById("right_div2");
    right_div2.onscroll = function(){
        var right_div2_left = this.scrollLeft;
        document.getElementById("right_div1").scrollLeft = right_div2_left;
    }
    //设置右边div宽度
    document.getElementById("right_div").style.width="2200px"//表格真实宽度""+document.documentElement.clientWidth-500+"px";
    setInterval(function() {
        document.getElementById("right_div").style.width="2200px"//表格真实宽度""+document.documentElement.clientWidth-500+"px";
    }, 0);
  //直接给滚动绑事件会频繁触发 // $("#wrapper").scroll(function () {//给table外面的div滚动事件绑定一个函数 // console.log('efg') // var left = $("#wrapper").scrollLeft();//获取滚动的距离 // var trs = $("#wrapper table tr");//获取表格的所有tr // trs.each(function (i) {//对每一个tr(每一行)进行处理 // //获得每一行下面的所有的td,然后选中下标为0的,即第一列,设置position为相对定位 // //相对于父div左边的距离为滑动的距离,然后设置个背景颜色,覆盖住后面几列数据滑动到第一列下面的情况 // //如果有必要也可以设置一个z-index属性 // if(i == 0){ // $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#ededed" }); // }else{ // if ((i+1) % 2 == 0) { // $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#ffffff" }); // }else{ // $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#eefcff" }); // } // } // // }); // }); }) //用防抖就行 function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; var myEfficientFn = debounce(function() { console.log('防抖') var left = $("#wrapper").scrollLeft();//获取滚动的距离 var trs = $("#wrapper table tr");//获取表格的所有tr trs.each(function (i) {//对每一个tr(每一行)进行处理 //获得每一行下面的所有的td,然后选中下标为0的,即第一列,设置position为相对定位 //相对于父div左边的距离为滑动的距离,然后设置个背景颜色,覆盖住后面几列数据滑动到第一列下面的情况 //如果有必要也可以设置一个z-index属性 if(i == 0){ $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#ededed" });//表头全选的input }else{ if ((i+1) % 2 == 0) { $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#ffffff" });//白底 }else{ $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#eefcff" });//蓝底 } } }); }, 100); // 绑定监听 $("#wrapper")[0].addEventListener('scroll', myEfficientFn); //节流的用法 function throttle(func, wait, mustRun) { var timeout, startTime = new Date(); return function() { var context = this, args = arguments, curTime = new Date(); clearTimeout(timeout); // 如果达到了规定的触发时间间隔,触发 handler if(curTime - startTime >= mustRun){ func.apply(context,args); startTime = curTime; // 没达到触发间隔,重新设定定时器 }else{ timeout = setTimeout(func, wait); } }; }; // 实际想绑定在 scroll 事件上的 handler function realFunc(){ console.log('节流') var left = $("#wrapper").scrollLeft();//获取滚动的距离 var trs = $("#wrapper table tr");//获取表格的所有tr trs.each(function (i) {//对每一个tr(每一行)进行处理 //获得每一行下面的所有的td,然后选中下标为0的,即第一列,设置position为相对定位 //相对于父div左边的距离为滑动的距离,然后设置个背景颜色,覆盖住后面几列数据滑动到第一列下面的情况 //如果有必要也可以设置一个z-index属性 if(i == 0){ $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#ededed" }); }else{ if ((i+1) % 2 == 0) { $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#ffffff" }); }else{ $(this).children().eq(0).css({ "position": "relative", "top": "0px", "left": left,"background-color": "#eefcff" }); } } }); } // 采用了节流函数 // $("#wrapper")[0].addEventListener('scroll',throttle(realFunc,100,200));

 

标签:function,防抖,right,节流,top,表头,var,position,left
From: https://www.cnblogs.com/liufeiran/p/18291752

相关文章

  • python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)
    python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片、表格、表头灰色、表格加边框,照片和表格不重叠。逻辑:获得图片的高度,根据高度计算表格从第几行开始插入。效果图:代码:importopenpyxlfromopenpyxl.stylesimportPatternFillfromopenpyxl.d......
  • 温故而知新,详细讲讲JavaScript的防抖与节流
    前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家详细讲讲JavaScript的防抖与节流,包含二者的区别与优缺点、使用场景,并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大家,欢迎收藏+关注哦......
  • 从搜索框的提示词中再探防抖和节流
    前言最近逛掘金时,看到了一篇文章。发现是我之前写过的一篇文章主题是防抖和节流的,看防抖时没感觉哪里不一样,但是当我看到节流时发现他的节流怎么这么繁琐(・∀・(・∀・(・∀・*)?抱着疑惑的想法,我仔细拜读了这篇文章。嗯。。好家伙不得不说大佬就是大佬,考虑的确实真的很细......
  • 防抖与节流机制
    防抖与节流:本质上是优化高频率执行代码的一种手段浏览器的resize、scroll、keypress、mousemove等事件在触发时,会不断地调用绑定在事件上的回调函数,极大地浪费资源,降低前端性能为了优化体验,需要对这类事件进行调用次数的限制,对此我们就可以采用防抖(debounce)和节流(throttle......
  • EasyExcel 自定义表头颜色
    publicvoidexport(ObjectDTOdto,HttpServletResponseresponse){try{if(ObjectUtils.isEmpty(dto.getObjNumberList())){thrownewBusinessException("编号不允许为空");}ListRespresult=o......
  • 如何实现ElementUI动态表头?
    可能看到这个标题,有些小伙伴会有些疑惑,动态表头是个什么东西,怎么没听说过?其实动态表头在企业的项目中用途还是非常广泛的,比如erp系统什么的那么动态表头是什么呢?说简单点就是让ElementUI的Table表格可以实现自定义表头展示+表头拖拽排序的一个功能这个东西我们肯定有很多小......
  • C#实现禁用DataGridView控件列表头自动排序功能 (附完整源码)
    C#实现禁用DataGridView控件列表头自动排序功能代码说明:在C#中,可以通过设置DataGridView控件的列的SortMode属性来禁用列头的自动排序功能。以下是一个完整的示例代码,展示了如何实现这一功能:usingSystem;usingSystem.Windows.Forms;​namespace......
  • 向已有的excel表中追加数据存储(表头一致)
    在使用Pandas处理Excel文件时,如果需要在已有的Excel文件中向下添加新数据,可以使用openpyxl作为引擎来实现这一功能。下面是具体的步骤和代码示例:读取已有的Excel文件:使用pd.read_excel读取已有的Excel文件和数据。准备新数据:将新数据整理为DataFrame。将新数据追加到已有......
  • Ant-Design-Vue动态表头并填充数据(含示例代码)
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • 防抖ref如何在vue中被定义
    本文由ChatMoney团队出品为什么ref要实现防抖在vue的开发过程中,我们通常会使用到ref,但在我们需要对一个频繁的赋值操作做防抖操作时,我们通常只能通过编写一个独立的防抖函数来实现,这样相对会多一些步骤(麻烦一些)。例如我们给一个即时搜索框的input实现防抖输入(即在输入文本n秒......