Tôi đã từng đề nghị Kumar và đã tạo ra hai bảng. Một chứa thead, và cái kia chứa cả thead và tbody.
<div ng-style="{'margin-right': scrollBarWidth}">
<table>
<thead>
<tr>
<th width="{{tableSizes[0].width}}">Col0</th>
<th width="{{tableSizes[1].width}}">Col1</th>
<th width="{{tableSizes[2].width}}">Col2</th>
</tr>
</thead>
</table>
</div>
<div class="fixedHeadBody">
<table ng-style="{'margin-top': -rowSize.height}">
<thead>
<tr el-size="rowSize">
<th el-size="{{tableSizes[0].width}}">Col0</th>
<th el-size="{{tableSizes[1].width}}">Col1</th>
<th el-size="{{tableSizes[2].width}}">Col2</th>
</tr>
</thead>
<tbody>
<!-- data goes here -->
</tbody>
</table>
</div>
Trong phần thứ hai, tôi thêm chỉ thị (xem bên dưới) để xem chiều rộng và chiều cao của mỗi cột. Đầu ra của các cột này được sử dụng để thiết lập chiều rộng của thead đầu tiên (liên kết góc). Tôi cũng đã thêm chỉ thị tương tự vào tr tread của bảng thứ hai và sử dụng giá trị độ cao để ẩn thead có thể cuộn của bảng thứ hai. Bằng cách đó, tôi chỉ cho thấy cái đầu tiên được cố định.
Một điều nữa tôi phải phân loại là scrollBar. Thanh cuộn chiếm không gian và điều chỉnh các cột giữa bảng đầu tiên và bảng thứ hai. Để khắc phục điều này, tôi đã thêm một lề phải vào bảng trên cùng bằng với chiều rộng của thanh cuộn (độ chênh lệch chiều rộng giữa div chứa bảng và bảng). Chiều rộng thanh cuộn khác nhau giữa các trình duyệt và chức năng cuối cùng hoạt động cho bất kỳ trình duyệt nào.
app.directive('elSize', ['$parse', '$timeout', function ($parse, $timeout) {
return function(scope, elem, attrs) {
var fn = $parse(attrs.elSize);
scope.$watch(function() {
return { width: elem.innerWidth(), height: elem.innerHeight() };
},
function (size) {
fn.assign(scope, size);
}, true);
}
}])
Trong bộ điều khiển, bạn có thể đặt scrollBarWidth bằng cách sử dụng hàm bên dưới. Bạn có thể gọi $ scope.setScrollBarWidth() từ bất cứ đâu khi bảng đã được hiển thị.
$scope.scrollBarWidth = "5px";
$scope.setScrollBarWidth = function() {
$timeout(function() {
var divWidth = $(".fixedHeadBody").width();
var tableWidth = $(".fixedHeadBody table").width();
var diff = divWidth - tableWidth;
if (diff > 0) $scope.scrollBarWidth = diff + "px";
}, 300);
}
Nguồn
2015-03-06 22:14:17
tôi don Không hiểu, bạn muốn tiêu đề bảng cố định nhưng cũng đáp ứng. Làm thế nào là có thể? – Stewie
@Stewie vui lòng xem phần này: http://www.fixedheadertable.com/ –
@Stewie bạn cũng có thể lấy ví dụ về lưới ng. Nếu bạn đặt tiêu đề cố định, nó vẫn đáp ứng. –