【发布时间】:2016-08-09 06:46:08
【问题描述】:
另一位 Web 开发人员想要冻结最左侧的列并允许滚动表格。他找到了这段代码并在他客户的网站上实现了。该代码完成了它的工作并按预期工作。
不过,他添加了一些 @media 查询以使表格更具响应性。这样做时,它搞砸了桌子。它使左列不与表格的其余部分对齐。
@media screen and (max-width: 699px) and (min-width: 520px) {
.exportTable th{
min-width: 170px !important;
}
.exportTable td{
min-width:170px !important;
max-width:170px !important;
}
}
所以我在 window.resize() 中添加了函数调用。
$(document).ready(function () {
app_handle_listing_horisontal_scroll($('#exportTable-listing'));
app_handle_listing_horisontal_scroll($('#exportTable-listing2'));
$(window).resize(function() {
app_handle_listing_horisontal_scroll($('#exportTable-listing'));
app_handle_listing_horisontal_scroll($('#exportTable-listing2'));
});
});
- 代码在调整窗口大小时被调用,但是outerHeight 和outerWidth 呈指数增长,导致了严重问题。
设置高度时会出现问题:
$(this).css('height', current_row_height);
和宽度/边距:
$(this).css('position','absolute')
.css('margin-left','-'+table_collumns_margin[index]+'px')
.css('width',table_collumns_width[index])
这是fiddle。
只需抓住窗口并来回调整大小,表格单元格的高度/宽度将呈指数增长,导致严重问题。
This fiddle 演示了当您点击@media 查询时,左列将如何错位。 (在查看此小提琴时,重要的是要命中 @media 查询。)
我该如何解决这些问题?
【问题讨论】:
-
你想完成什么?为防止它调整列大小,只需从
$(window).resize(function(){}中删除您的代码 -
该代码旨在冻结左列,它通过设置左列的宽度和高度来匹配表格的其余部分。代码完全符合预期,但是结合媒体查询,这些值不再使表格看起来不错。因此需要重新运行代码,刷新页面即可实现目标。但是,刷新窗口调整大小是不好的做法。所以我把代码放到resize中,这样代码会重新调整左列的高度和宽度以匹配表格,不希望的效果是那些高度和宽度值会增长。
-
将js代码从resize中取出来解决指数增长的问题。但是,当 at 媒体查询被击中时,左列不再与表匹配。刷新重新加载js的页面可以修复它。所以我们需要让代码在resize中运行,让表格响应js。
-
这不是想要的效果吗? jsfiddle.net/zzu0ojac/11左栏被冻结,页面仍然调整大小没有问题。
-
不,一旦@media 查询被点击,左列就不会与表格的其余部分正确对齐。代码需要在窗口调整大小时运行。我在我的问题中说了所有这些......
标签: javascript jquery css