HTML页面table滚动条的实现

##table scrollbar & header fixed

有很多页面由于数据量过大,会产生横纵滚动条。为了便于使用者观看,我们要把表头固定一下。根据这个需求写了个demo来实现这个功能。

主要解决了几点问题:
1.table实现横纵滚动条
2.table表头固定
3.table列宽自适应
4.table内容不换行

主要代码块

css:

			.table-scroll {
				width: calc(100% - 5px);
				overflow-x: scroll;
				white-space: nowrap;
			}
			
			.table-scroll table {
				table-layout: fixed;
				width: calc(100% - 10px);
				background-color:darkseagreen ;
			}
			
			.table-scroll thead {
				display: table-row;
				background-color: bisque;
			}
			
			.table-scroll tbody {
				overflow-y: scroll;
				overflow-x: hidden;
				display: block;
				height: calc(100vh - 300px);
			}
			
			.table-scroll th,td {
				width: 160px;
				overflow: hidden;
				text-overflow: ellipsis;
				min-width: 160px;
				border: 1px solid #808080;
			}
			
			h4, h5 {
				color: cornflowerblue;
			}

js:

	$(function() {
	    	$('.table-scroll').scroll(function() {
				  $('.table-scroll table').width($('.table-scroll').width() 
				  + $('.table-scroll').scrollLeft());
				});
				
				var tableTdWidths = new Array();
		    var tableWidth = 0;
		    var tableTr0Width = 0;
		    var tableThNum = 0;
		    var tableTr1Width = 0;
		    
				tableWidth = $('.table-scroll table').css('width').replace('px','');
				tableThNum = $('.table-scroll tr:eq(0)').children('th').length;
	    	
	    	if ($('.table-scroll tr').length == 1) { // header only
	    		if (tableWidth > tableTr0Width) {
	    			$('.table-scroll tr:eq(0)').children('th').each(function(i){
			    		$(this).width(parseInt(($(this).css('width').replace('px','')) 
			    		+ parseInt(Math.floor((tableWidth - tableTr0Width) / tableThNum))) + 'px');
			    	});
	    		}
	    	} else { // header and body
	    		tableTr1Width = $('.table-scroll tr:eq(1)').css('width').replace('px','');
					$('.table-scroll tr:eq(1)').children('td').each(function(i){
		    		tableTdWidths[i]=$(this).css('width').replace('px','');
		    	});
		    	$('.table-scroll tr:eq(0)').children('th').each(function(i) {
			if(parseInt($(this).css('width').replace('px', '')) >
				parseInt(tableTdWidths[i])) {
				tableTdWidths[i] = $(this).css('width').replace('px','');
		    		}
		    	});
		    	
	    		if (tableWidth > tableTr1Width) {
			    	//set all th td width
			    	$('.table-scroll tr').each(function(i){
			    			$(this).children().each(function(j){
			    				$(this).css('min-width',(parseInt(tableTdWidths[j]) 
			    				+ parseInt(Math.floor((tableWidth - tableTr1Width) / 
			    				tableThNum))) + 'px');
			    			});
		    		});
	    		} else {
	    			//method 1 : set all th td width
			    	$('.table-scroll tr').each(function(i){
			    			$(this).children().each(function(j){
			    				$(this).css('min-width',tableTdWidths[j] + 'px');
			    			});
		    		});
		    	}
	    	}
			});		

html:

	<body>
		<h4>完成效果:1.固定表头 2.table横纵滚动条 3.table列宽自适应 4.table内容不换行</h4>
		<div class="table-scroll">
			<table>
				<thead>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
					<th>title1</th>
				</thead>
				<tbody>
					<tr>
						<td>1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>2</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>3</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>4</td>
						<td>body1 body1 body1 body1 body1 body1 body1 body1 body1 body1 body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1 body1 body1 body1 body1 body1 body1 body1 body1 body1 body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>5</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>6</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>7</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>8</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>9</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>10</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>11</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>12</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>13</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>14</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>15</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>16</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>17</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>18</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>19</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>20</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>21</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>22</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>23</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>24</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>25</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>26</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>27</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>28</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>28</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>29</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
					<tr>
						<td>30</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
						<td>body1</td>
					</tr>
				</tbody>
			</table>
		</div>
	</body>		

网上也有很多的例子,但是实现的效果不是想要的,自己工作需要做了一下,画面不好看,重点看效果,如有问题请指正!

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值