• 移动端表格固定列和表头


    // 数据
    const viewdata = { showmodel: "saledetailtable", modelcode: "saledetailtable", tablist: [ { '80', key: 'all', // 必须和当前显示的数据键相同 例如:dataall title: '全部(40)' }, { '50', key: 'one', // 例如:dataone title: '红色' }, { '50', key: 'two', title: '绿色' }, { '50', key: 'three', title: '黑色' }, { '50', key: 'four', title: '白色' }, ], // 每一列的宽和标题 widthlist: [ { '100', title: "
    <p >规格</p>"}, { '70', title: '销量'}, { '90', title: '库存'}, { '90', title: "<div>已补<i class='fa fa-address-book' style='color: #FF3E3E; margin-left: 5px'></i></div>"}, { '90', title: '订货'}, { '50', title: '在途'}, { '50', title: '占用'}, ], // 固定列表头 left_header_all: [ { '100', title: "<p >规格</p>"}, { '70', title: '销量'}, ], // 固定列内容 left_body_all: [ { code: '1', list: [ { linkurl: '1', value: "<div style='color: #0486FE'>红色/S</div>" }, { linkurl: '', value: '<p >100</p>' }, ] }, { code: '2', list: [ { linkurl: '', value: '红色/S2'}, { linkurl: '', value: '<p >100</p>' }, ] }, { code: '3', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, ] }, { code: '4', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, ] }, { code: '5', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, ] }, ], dataall: [ { code: '1', list: [ { linkurl: '1', value: "<div style='color: #0486FE'>红色/S</div>" }, { linkurl: '', value: '<p >100</p>' }, { linkurl: '', value: '300'}, { linkurl: '', value: '200'}, { linkurl: '', value: '400'}, { linkurl: '', value: '300'}, { linkurl: '',value: '500'} ] }, { code: '2', list: [ { linkurl: '', value: '红色/S2'}, { linkurl: '', value: '<p >100</p>' }, { linkurl: '', value: '300'}, { linkurl: '', value: '200'}, { linkurl: '', value: '400'}, { linkurl: '', value: '300'}, { linkurl: '',value: '500'} ] }, { code: '3', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, { linkurl: '', value: '300'}, { linkurl: '', value: '200'}, { linkurl: '', value: '400'}, { linkurl: '', value: '300'}, { linkurl: '',value: '500'} ] }, { code: '4', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, { linkurl: '', value: '300'}, { linkurl: '', value: '200'}, { linkurl: '', value: '400'}, { linkurl: '', value: '300'}, { linkurl: '',value: '500'} ] }, { code: '5', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, { linkurl: '', value: '300'}, { linkurl: '', value: '200'}, { linkurl: '', value: '400'}, { linkurl: '', value: '300'}, { linkurl: '',value: '500'} ] } ], // 以下tab 红色 的数据 dataone: [ { code: '1', list: [ { linkurl: '', value: "<div style='padding: 10px'>红色/S24</div>"}, { linkurl: '', value: '<p >100</p>' }, { linkurl: '', value: '300'}, { linkurl: '', value: '200'}, { linkurl: '', value: '400'}, { linkurl: '', value: '300'}, { linkurl: '',value: '500'} ] } ], left_header_one: [ { '100', title: "<p >规格</p>"}, { '70', title: '销量'}, ], left_body_one: [ { code: '1', list: [ { linkurl: '', value: '红色/S2'}, { linkurl: '', value: '<p >100</p>' }, ] }, ], }    let datalist = []; let left_header_data = []; let left_body_data = []; if(viewdata["data"+stateData.rowsaledetailtableflag] != undefined) { datalist = viewdata["data"+stateData.rowsaledetailtableflag] left_header_data = viewdata["left_header_"+stateData.rowsaledetailtableflag] left_body_data = viewdata["left_body_"+stateData.rowsaledetailtableflag] } let tablist = viewdata.tablist || []; let widthlist = viewdata.widthlist || []; function thWidth(val, defauleWidth) { if(val == '' || val == undefined || val == '0') { return defauleWidth; }else { return val + 'px'; } }
       // 获取屏幕的宽度 let allWidth = window.innerWidth; if(viewdata != null || viewdata != undefined) { let num = 0; widthlist.map(item => { num += parseInt(item.width); }) let all_width = num; if(all_width
    <= window.innerWidth) { allWidth = window.innerWidth }else { allWidth = all_width; } } setTimeout(() => { if(document.getElementById('pubhead'+stateData.rowsaledetailtableflag) != null) { // 获取表头高度 let he = document.getElementById('pubhead'+stateData.rowsaledetailtableflag).offsetHeight; // 获取表头宽度 let wid = document.getElementById('pubhead1'+stateData.rowsaledetailtableflag).scrollWidth; // 获取内容body内容的高度 let body_height = document.getElementById("bodyBox"+stateData.rowsaledetailtableflag).offsetHeight; let body_content = document.getElementById("bodyBox"+stateData.rowsaledetailtableflag); // 固定列的内容高度 let left_body = document.getElementById("pobodyBox"+stateData.rowsaledetailtableflag); // 如果内容高度<300, box的高度 = 表头高度 + body内容的高度,反之最大不能超过300 // 如果内容高度>300, body内容的高度 = 300 - 表头高度 if(body_height < 300) { document.getElementById('box'+stateData.rowsaledetailtableflag).style.height = (he + body_height) + 'px' body_content.style.height=body_height+'px'; left_body.style.height=body_height+'px'; }else { document.getElementById('box'+stateData.rowsaledetailtableflag).style.height = '300px' body_content.style.height=(300-he)+'px'; left_body.style.height=(300-he)+'px'; } // body内容的宽度 = 表头的宽度 body_content.style.width=wid+'px'; body_content.style.marginTop=he+'px'; body_content.style.overflowY='scroll'; body_content.style.overflowX='hidden'; // 定位表格 document.getElementById('positionHeadertr').style.height = he-4 + 'px'; left_body.style.marginTop=he+'px'; left_body.style.overflowY='scroll'; left_body.style.overflowX='hidden'; } }, 200)
      // 点击每个单元格跳转 function currentTrRow(it) { if(it.linkurl !
    = '') { console.log('准备跳转了') } } // 滚动的height function leftScroll(ty) { let left_scroll = document.getElementById('pobodyBox'+stateData.rowsaledetailtableflag); let right_scroll = document.getElementById('bodyBox'+stateData.rowsaledetailtableflag); if(ty == 'left') { right_scroll.scrollTop = left_scroll.scrollTop; }else { left_scroll.scrollTop = right_scroll.scrollTop; } } // 获取固定列的宽 let pos_width = 0; if(left_header_data.length != 0) { left_header_data.map(item => { pos_width += parseInt(item.width) }) } function showDiv(data) { let showView = <div id={'box'+stateData.rowsaledetailtableflag} style={{position: 'relative'}}> <div className={styles.tableBox} > <table className={styles.tableHead} id={'pubhead'+stateData.rowsaledetailtableflag} style={{ allWidth + 'px'}}> { widthlist.map((it, wthind) => { let defauleWidth = window.innerWidth / widthlist.length; return <colgroup key={wthind}> <col width={thWidth(it.width, defauleWidth)} /> </colgroup> }) } <thead id={'pubhead1'+stateData.rowsaledetailtableflag}> <tr> { widthlist.map((item, ind) => { return <th key={ind}> <div style={{display: 'inline-block'}} dangerouslySetInnerHTML={{__html:item.title}}></div> {/* { item.imgflag == '1' ? <img src={require('../../assets/huocar.png')} style={{height:12, marginLeft: '10px'}} /> : null } */} </th> }) } </tr> </thead> </table> <div className={styles.tableBodyBox} id={'bodyBox'+stateData.rowsaledetailtableflag} onScroll={leftScroll.bind(this, 'right')}> <table className={styles.tableBody} style={{margin: 0, padding: 0}}> { widthlist.map((it, wthind) => { let defauleWidth = window.innerWidth / widthlist.length; return <colgroup key={wthind}> <col width={thWidth(it.width, defauleWidth)} /> </colgroup> }) } <tbody> { datalist.map((item, trind) => { return <tr key={trind} > { item.list.map((it, tdind) => { return <td key={tdind} onClick={ it.linkurl != '' ? currentTrRow.bind(this, it) : ''}> <div style={{height: '100%', wordWrap:"break-word", }} dangerouslySetInnerHTML={{__html:it.value}}></div> </td> }) } </tr> }) } </tbody> </table> </div> </div> <div className={styles.tableBox} style={{position: 'absolute', left: 0, top: 0, (pos_width+6)+'px', boxShadow: '1px 0px 5px #EAEAEA'}}> <table className={styles.tableHead}> { left_header_data.map((it, wthind) => { return <colgroup key={wthind}> <col width={it.width} /> </colgroup> }) } <thead > <tr id={'positionHeadertr'}> { left_header_data.map((item, ind) => { return <th key={ind}> <div style={{display: 'inline-block', '100%'}} dangerouslySetInnerHTML={{__html:item.title}}></div> {/* { item.imgflag == '1' ? <img src={require('../../assets/huocar.png')} style={{height:12, marginLeft: '10px'}} /> : null } */} </th> }) } </tr> </thead> </table> <div className={styles.tableBodyBox} id={'pobodyBox'+stateData.rowsaledetailtableflag} onScroll={leftScroll.bind(this, 'left')}> <table className={styles.tableBody} style={{margin: 0, padding: 0}}> { left_header_data.map((it, wthind) => { return <colgroup key={wthind}> <col width={it.width} /> </colgroup> }) } <tbody> { left_body_data.map((item, trind) => { return <tr key={trind} > { item.list.map((it, tdind) => { return <td key={tdind} onClick={currentTrRow.bind(this, it)}> <div style={{height: '100%', wordWrap:"break-word", }} dangerouslySetInnerHTML={{__html:it.value}}></div> </td> }) } </tr> }) } </tbody> </table> </div> </div> </div> return showView; }
      // 展示的html部分   <div>
       
    {
           showDiv(datalist)
        }  
      </div>
     
  • 相关阅读:
    TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
    理论基础+实战控制台程序实现AutoFac注入
    C# class 浅拷贝 与 深拷贝
    给定一个矩阵 A, 返回 A 的转置矩阵。
    [弹出消息] C#ShowMessageBox帮助类
    [弹出消息] C#MessageBox帮助类 (转载)
    [XML] C#XMLProcess操作Xml文档的帮助类 (转载)
    [XML] C# XmlHelper操作Xml文档的帮助类 (转载)
    [XML] resources的Xml配置文件 (转载)
    [XML] Resource帮助类
  • 原文地址:https://www.cnblogs.com/na-w/p/13926796.html
Copyright © 2020-2023  润新知