将表格调整到屏幕之外
Resize table beyond screen
我写了一些代码,允许用户通过单击第一行的列边界来调整每一列的大小(很像Excel)。
我的问题是:我就是不能把桌子做得比窗户大。相反,当我尝试此操作时,其他列会收缩。我相信一定有一些CSS技巧可以做到这一点,但就是找不到
我做了一把小提琴。
此外,我认为使用event.preventDefault
可以在调整列大小时停止选择文本(如果光标悬停在第一行的下方或上方)。但它不起作用。有什么想法吗?或者我该怎么做?提前感谢!
我的代码:
function getMousePos(table, evt) {
var rect = table.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
var row1x = null,
row1col = null,
row1colW = null;
function row1MouseDown(e) {
if (row1x == null) {
var table = document.getElementById('tblMain');
var pos = getMousePos(table, e);
var N = table.rows[0].cells.length;
var gap = 5;
var i, w, ww = 0;
for (i = 0; i < N; i++) {
w = table.rows[0].cells[i].offsetWidth;
ww += w;
if ((pos.x > ww - gap) && (pos.x < ww + gap)) {
row1x = pos.x;
row1col = i;
row1colW = table.rows[0].cells[i].offsetWidth;
}
}
}
}
function row1MouseUp(e) {
row1x = null;
row1col = null;
row1colW = null;
}
function row1MouseMove(e) {
var table = document.getElementById('tblMain');
var pos = getMousePos(table, e);
var gap = 5;
var i, w, ww = 0;
var N = table.rows[0].cells.length;
if (row1x == null) {
var row1 = document.getElementById('tr1Main');
row1.style.cursor = 'default';
for (i = 0; i < N; i++) {
w = table.rows[0].cells[i].offsetWidth;
ww += w;
if ((pos.x > ww - gap) && (pos.x < ww + gap)) {
row1.style.cursor = 'ew-resize';
}
}
} else {
var width = row1colW - row1x + pos.x;
table.rows[0].cells[row1col].style.width = width + 'px';
e.preventDefault();
}
}
table,
td {
border: 1px solid black;
border-collapse: collapse;
}
<body onMouseMove='row1MouseMove(event)' onMouseUp='row1MouseUp(event)'>
<p> </p>
<table id='tblMain'>
<tr id='tr1Main' onMouseMove='row1MouseMove(event)' onMouseDown='row1MouseDown(event)' onMouseUp='row1MouseUp(event)'>
<td>col1</td>
<td>col2</td>
<td>col3</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
</table>
</body>
编辑:JavaScript中的以下更改是迄今为止我所做的最好的更改,但仍然远远不够好。桌子超出了屏幕的尽头,但出现了一些小故障。
function row1MouseMove(e) {
var table = document.getElementById('tblMain');
var pos = getMousePos(table,e);
var gap = 5;
var i, w, ww=0;
var N = table.rows[0].cells.length;
if (row1x == null) {
var row1 = document.getElementById('tr1Main');
row1.style.cursor = 'default';
for (i=0; i<N; i++) {
w = table.rows[0].cells[i].offsetWidth;
ww += w;
if ((pos.x > ww-gap) && (pos.x < ww+gap)) {
row1.style.cursor = 'ew-resize';
}
}
} else {
var width = row1colW - row1x + pos.x;
table.rows[0].cells[row1col].style.width = width + 'px';
for (i=0; i<N; i++) {
if (i == row1col) {
ww += width;
} else {
ww += table.rows[0].cells[i].offsetWidth;
}
}
table.style.width = ww + 'px';
}
}
默认情况下,表将在窗口外溢出。一些需要查找和调整的CSS规则是:
table-layout:
overflow:
相关文章:
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 我应该使用Ng提交还是点击表格
- CSS表格:从列平移到整个表格宽度
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 将HTML表格导出到excel时,无法将数据加载到excel文件中
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 使用图像数组列表的simplegallary.js显示适合桌面屏幕的图像
- 滚动和表格
- 将谷歌自动完成地址信息放在页面上,而不是表格中
- 导航栏没有调整到浏览器屏幕的大小
- 调整屏幕大小后不显示子菜单
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- Google电子表格getValue([cell containing ])不返回制表符
- Javascript根据屏幕宽度创建表格
- HTML 中的表格占据了整个屏幕,一列比另一列大
- 在最小化屏幕时,表格应缩小
- 将表格调整到屏幕之外
- 可能加载谷歌驱动器电子表格JSON未经同意屏幕
- 滚动表格(但不滚动屏幕)
- 在HTML中,表格和表格内容应该根据设备屏幕调整大小