简体   繁体   English

嵌入式表垂直滚动,带有固定标题

[英]Embedded Table scroll vertical with fixed header

I have a table which is embedded in another div, of course the size is bigger than the outer div. 我有一个嵌入在另一个div中的表,当然,其大小大于外部div。 I am currently using ScrollToFixed to fix the header on top while scrolling and leave it again when content of table is out of viewport. 我目前正在使用ScrollToFixed在滚动时将标题固定在顶部,并在表格内容不在视口中时再次保留它。 That works but what is really ugly is that while header-row is fixed it is greater than the content and so it overflows on left/right. 那行得通,但实际上很丑陋的是,尽管标头行是固定的,但它大于内容,因此在左/右溢出。

Please see the Fiddle where it does work as described. 按照说明操作小提琴 What I can imagine is somehow set a fix height and width of the table and it should be vertically and horizontally scrollable as there are overflows and the first row should be fixed on scrolling. 我可以想象的是,以某种方式设置了表格的固定高度和宽度,由于溢出,表格应该可以垂直和水平滚动,并且在滚动时应该固定第一行。

 $(document).ready(function() { var scrollLeft = 0; var leftRoundingRect = $('.table-body')[0].getBoundingClientRect().left; $('.sticky').scrollToFixed({ limit: $('.user.last').offset().top, removeOffsets: true, zIndex: 0, unfixed: function() { $(this).offset({ left: leftRoundingRect - scrollLeft }); } }); $(".table-body").scroll(function() { scrollLeft = this.scrollLeft; $(".user.sticky").offset({ left: leftRoundingRect - scrollLeft }); }); }); 
 .tab { padding: 20px; border: 1px solid lightgray; } .inner-content { overflow: hidden; padding: 0 10px 0 10px; } .table-body { overflow: auto; } .users { white-space: nowrap; font-size: 0; } .user { font-size: 0; border-bottom: 1px solid #d3d3d3; border-left: 1px solid #d3d3d3; color: #555; width: 750px; } .user.odd { background: #f4f5f7; } .sticky { background: grey; } .bold { color: #fff; font-weight: 600; } .company, .firstName, .lastName, .roles { font-size: 18px; border-right: 1px solid lightgray; display: inline-block; width: 150px; padding: 10px; overflow: scroll; white-space: nowrap; } 
 <div class="tab"> <div class="inner-content"> <div class="users"> <div class="user sticky"> <div class="firstName bold">First</div> <div class="lastName bold">Last</div> <div class="roles bold">Role</div> <div class="company bold">Company</div> </div> <div class="table-body"> <div class="user"> <div class="firstName">Max</div> <div class="lastName">Mustermann</div> <div class="roles">admin</div> <div class="company">HP</div> </div> <div class="user odd"> <div class="firstName">Melanie</div> <div class="lastName">Musterfrau</div> <div class="roles">readonly</div> <div class="company">IBM</div> </div> <div class="user"> <div class="firstName">Max</div> <div class="lastName">Mustermann</div> <div class="roles">admin</div> <div class="company">HP</div> </div> <div class="user odd"> <div class="firstName">Melanie</div> <div class="lastName">Musterfrau</div> <div class="roles">readonly</div> <div class="company">IBM</div> </div> <div class="user"> <div class="firstName">Max</div> <div class="lastName">Mustermann</div> <div class="roles">admin</div> <div class="company">HP</div> </div> <div class="user odd"> <div class="firstName">Melanie</div> <div class="lastName">Musterfrau</div> <div class="roles">readonly</div> <div class="company">IBM</div> </div> <div class="user last"> <div class="firstName">Test</div> <div class="lastName">Tester</div> <div class="roles">contributor</div> <div class="company">SAP</div> </div> </div> </div> </div> </div> <div style="display:inline-block; height: 1000px; padding-top:50px;">Let's Scroll Baby </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://bigspotteddog.github.io/ScrollToFixed/jquery-scrolltofixed-min.js"></script> 

Following Code does Work as I described it should work. 按照我的描述,下面的代码可以正常工作。

 $(document).ready(function() { var scrollLeft = 0; var leftRoundingRect = $('.table-body')[0].getBoundingClientRect().left; $(".table-body").scroll(function() { scrollLeft = this.scrollLeft; $(".user.sticky").offset({ left: leftRoundingRect - scrollLeft }); }); $(".user").width($(".table-body").get(0).scrollWidth - 1); }); 
 .tab { padding: 20px; border: 1px solid lightgray; width:220px; } .inner-content { padding: 0 10px 0 10px; width:200px; } .header { overflow: hidden; } .table-body { overflow: auto; height: 100px; } .users { white-space: nowrap; font-size: 0; } .user { font-size: 0; border-bottom: 1px solid #d3d3d3; border-left: 1px solid #d3d3d3; color: #555; width: 750px; } .user.odd { background: #f4f5f7; } .sticky { background: grey; } .bold { color: #fff; font-weight: 600; } .company, .firstName, .lastName, .roles { font-size: 18px; border-right: 1px solid lightgray; display: inline-block; width: 150px; padding: 10px; overflow: scroll; white-space: nowrap; } 
 <div style="display:inline-block; height: 200px; padding-top:50px;">Other Content </div> <div class="tab"> <div class="inner-content"> <div class="header"> <div class="user sticky"> <div class="firstName bold">First</div> <div class="lastName bold">Last</div> <div class="roles bold">Role</div> <div class="company bold">Company</div> </div> </div> <div class="table-body"> <div class="user"> <div class="firstName">Max</div> <div class="lastName">Mustermann</div> <div class="roles">admin</div> <div class="company">HP</div> </div> <div class="user odd"> <div class="firstName">Melanie</div> <div class="lastName">Musterfrau</div> <div class="roles">readonly</div> <div class="company">IBM</div> </div> <div class="user"> <div class="firstName">Max</div> <div class="lastName">Mustermann</div> <div class="roles">admin</div> <div class="company">HP</div> </div> <div class="user odd"> <div class="firstName">Melanie</div> <div class="lastName">Musterfrau</div> <div class="roles">readonly</div> <div class="company">IBM</div> </div> <div class="user"> <div class="firstName">Max</div> <div class="lastName">Mustermann</div> <div class="roles">admin</div> <div class="company">HP</div> </div> <div class="user odd"> <div class="firstName">Melanie</div> <div class="lastName">Musterfrau</div> <div class="roles">readonly</div> <div class="company">IBM</div> </div> <div class="user last"> <div class="firstName">Test</div> <div class="lastName">Tester</div> <div class="roles">contributor</div> <div class="company">SAP</div> </div> </div> </div> </div> <div style="display:inline-block; height: 200px; padding-top:50px;">Other Content </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM